web-dev-qa-db-ja.com

タブバーでバッジの値を設定する方法は?

xMLからデータを読み取り、View Controllerで値を表示する必要があります。 tab barcontrollerを使用しています。 XMLデータを読み取り、バッジとしてタブバーに表示する必要があります。ここに私のコントローラーコードがあります。

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{

    if([elementName isEqualToString:@"Event"]) {
        //Initialize the array.
        rssOutputData  = [[NSMutableArray alloc] init];
        mycount = [attributeDict objectForKey:@"count"];
         NSLog(@"Reading count value :%@",mycount);
    }
    else if([elementName isEqualToString:@"eventdashboard"]) {
        //Initialize the book.
        aEvent = [[Eventlist alloc] init];
        //Extract the attribute here.
        aEvent.id = [[attributeDict objectForKey:@"userid"] integerValue];
        NSLog(@"Reading id value :%d", aEvent.id);
    }
    NSLog(@"Processing Element: %@", elementName);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if(!nodecontent)
        nodecontent = [[NSMutableString alloc] initWithString:string];else
            [nodecontent appendString:string];
    NSLog(@"Processing Value: %@", nodecontent);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if([elementName isEqualToString:@"Event"])
        return;
    if([elementName isEqualToString:@"eventdashboard"]) {
        [rssOutputData addObject:aEvent];
        [aEvent release];
        aEvent= nil;
        }
    else
        [aEvent setValue:nodecontent forKey:elementName];
    [nodecontent release];
    nodecontent = nil;

}
- (void)viewDidLoad
{

        [super viewDidLoad];
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg2.jpeg"]];
        NSLog(@"%d",memberid);
        myid = [SingleTonClass sinlgeTon].memberIdOne;
        NSString *post =[[NSString alloc] initWithFormat:@"userid=%d",myid];
        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
        NSURL *url = [NSURL URLWithString:@"http://journalonline.in/cfts/dashboards/dashboard?"];
        NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
        // [theRequest addRequestHeader:@"Content-Type" value:@"application/xml"];
        [theRequest setHTTPMethod:@"POST"];
        [theRequest setValue:@"application/xml" forHTTPHeaderField:@"Accept"];
        [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [theRequest setHTTPBody:postData];
        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
        if( theConnection )
        {
            webData = [[NSMutableData data] retain];
            NSLog(@"%@",webData);
        }
        }

-(void)viewWillAppear:(BOOL)animated{
    [tblView reloadData];
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [connection release];
    [webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
    eventarray = [[NSMutableArray alloc]init];
    xmlParserObject = [[NSXMLParser alloc] initWithData:webData];
    [xmlParserObject setDelegate:self];
    [xmlParserObject parse];


     for (int i =0; i<[rssOutputData count]; i++) {
        Eventlist *log = [rssOutputData objectAtIndex:i];
        eventid = log.id;
        NSLog(@"%d",eventid);
        Invit = log.invitationdet; 
        NSLog(@"%@",Invit);

        [eventarray addObject:log];
    }


    [connection release];
    [tblView reloadData];
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSString * segueIdentifier = [segue identifier];
    if([segueIdentifier isEqualToString:@"MainEventList"]){
        UINavigationController *nav = [segue destinationViewController];
        MaineventListController *MVC = (MaineventListController *)nav.topViewController;
        MVC.memberid1 = [SingleTonClass sinlgeTon].memberIdOne;
        NSLog(@"%d",MVC.memberid1);
    }
    if ([segue.identifier isEqualToString:@"EventListDetail"])
    {
        NSIndexPath *indexPath = [tblView indexPathForSelectedRow];
        [[SingleTonClass sinlgeTon] addObjectsColorArray:[NSString stringWithFormat:@"%d",indexPath.row]];
        MainEventDetailController *destViewController = segue.destinationViewController;
        MainEvent *aEvent1 = [eventarray objectAtIndex:indexPath.row];
        destViewController.eveID = aEvent1.id;
        destViewController.usrid =  [SingleTonClass sinlgeTon].memberIdOne;
    }
}

-(void)didReceiveMemoryWarning  {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [eventarray count];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section == 0)
        return  [eventarray count];
    if (section == 1)
        return 1;
    return 0;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"eventCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if(indexPath.section == 0)
    {
        Eventlist *msglist = [eventarray objectAtIndex:indexPath.row];
        cell.textLabel.text = msglist.invitationdet;
        NSLog(@"Array %@",[SingleTonClass sinlgeTon].colorArray);
        NSInteger stat=msglist.readflag;
        if([[SingleTonClass sinlgeTon].colorArray containsObject:[NSString stringWithFormat:@"%d",indexPath.row]] || stat == 1 ) {
            NSInteger stat1 = msglist.responseflag;
            if(stat1 == 1){
                cell.textLabel.textColor = [UIColor yellowColor];
            }
            else {
             cell.textLabel.textColor = [UIColor redColor];
            }
        }
               else{
        cell.textLabel.textColor = [UIColor greenColor];
        }
        cell.backgroundColor = [UIColor blackColor];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
          }
    if(indexPath.section == 1)
    {
        UIButton *viewmoreButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        viewmoreButton.frame = CGRectMake(200.0f, 5.0f, 80.0f, 30.0f);
        [viewmoreButton setTitle:@"View More" forState:UIControlStateNormal]; 
        [cell addSubview:viewmoreButton];
        [viewmoreButton addTarget:self
                           action:@selector(viewMore:)
                 forControlEvents:UIControlEventTouchUpInside];
        cell.backgroundColor = [ UIColor blackColor];
    }
    return cell;
}
- (void)viewMore:(id)sender
{
    [self performSegueWithIdentifier:@"MainEventList" sender:sender];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(void) dealloc
{
    [xmlParserObject release];
    [super dealloc];
}

ここからXMLから値を読んでいます

 mycount = [attributeDict objectForKey:@"count"];

タブバーにバッジとして表示することを知りません。 ViewdidLoadの下に表示しようとしましたが、機能しませんでした。

29
user2728139

バッジの値を設定する最も簡単な方法を教えてください:

[[self navigationController] tabBarItem].badgeValue = @"YourBadgeValue";
71
Vineet Singh

現在のタブのバッジを変更する場合は、Vineet Singhの回答が役立ちます。代わりに、タブバーにある別のタブの値を変更する必要がある場合は、次を使用します。

Objective-C

[[self.tabBarController.tabBar.items objectAtIndex:0] setBadgeValue:nil];

スイフト

tabBarController?.tabBar.items?[0].badgeValue = nil

使用したインデックスを、値を編集する実際のタブに置き換えてください。

59
Andrea Gottardo
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
UITabBarItem *tbItem = (UITabBarItem *)[appDelegate.tabBarController.tabBar.items objectAtIndex:tabIndex];
tbItem.badgeValue = [NSString stringWithFormat:@"%i", count];
5

これを試して:

tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",count];
2

Swift 2.0:

    self.navigationController!.tabBarItem.badgeValue = "YourBadgeValue"
2
Bill Chan

TabItemでこれを設定することについていくつかの回答がありますが、タブが一度もロードされていない場合、viewDidLoad関数はロードされません。これは、プッシュ通知処理などのバックグラウンドプロセスを作成してタブのバッジを設定する場合に特に重要です。バッジ設定を処理するためにTabViewControllerが必要になる可能性がはるかに高くなります。 TabItemのタグの方が適切であると思われ、更新するタブが見つかるまでタブを切り替えます。

乾杯!

1
BK-
int indexOfTabbarItem = 0;
    NSString *badgeValue = [NSString stringWithFormat:@"%lu", (long)countUnreadMessages];

    [[[[self viewControllers] objectAtIndex:indexOfTabbarItem] tabBarItem] setBadgeValue:([badgeValue isEqualToString:@"0"]) ? nil : badgeValue];

これは私のために働いた。場合によっては、適切なコントローラーを見つけてから、そのアイテムを設定する必要があります。乾杯。

1
Waleed Mahmood