2013-11-18 5 views
23

Мне нужно прочитать данные из xml и отобразить значения в контроллере вида. Я использую tabbarcontroller. где я должен читать 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 но техника его подводит работал Просьба помочь мне друзья

ответ

63

Позвольте мне сказать вам самый простой способ установить значение жетона:

[[self navigationController] tabBarItem].badgeValue = @"YourBadgeValue"; 
+1

где добавить это в контроллер? – user2728139

+1

Вам нужно добавить это на контроллер просмотра той конкретной вкладки, на которой вы хотите установить значение значка. –

1

Попробуйте это:

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

'IOS 9.2/Swift 2.1.1/Xcode 7.2.1/OSX 10.10.5' , 'tabBarItem' является свойством View Controller, и установка этой строки где-то в контроллере представления, например внутри viewWillAppear(), работает для меня. – 7stud

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

это в быстром порядке. – CularBytes

1

Я вижу некоторые ответы об установке этого в TabItem, но если вкладка никогда не была загружена, функция viewDidLoad никогда не будет загружена. Это особенно важно, когда вы пытаетесь создать фоновый процесс, такой как обработка push-уведомлений, установите значок табуляции. Скорее всего, вам понадобится ваш TabViewController для настройки значка. Теги в TabItem кажутся более подходящими, а затем перелистывайте вкладки, пока не найдете тот, который вы хотите обновить.

Cheers!

44

Ответ Vineet Singh хорош, если вы хотите изменить значок для текущей вкладки. Если вместо этого вы должны изменить значение для другой вкладке у вас в панели вкладок, используйте следующее:

Objective-C

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

Swift

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

Не забудьте замените индекс, который я использовал с фактической вкладкой, для которой вы хотите изменить значение.

+3

Вы должны установить его '' 'nil'''' '' '' '' '' '', так как в дальнейшем все еще отображается красный пузырь. – Supertecnoboff

+0

Благодарим за комментарий. Я не использовал этот код через некоторое время, но не могу вспомнить, что у меня эта проблема. Возможно, поведение изменилось с iOS 9.Я проверю, а затем обновить свой ответ соответствующим образом. –

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

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

Это сработало для меня. Несколько раз вам нужно найти правильный контроллер, а затем его элемент, чтобы установить его. Приветствия.

1

быстры 2,0:

self.navigationController!.tabBarItem.badgeValue = "YourBadgeValue" 
0

Для ионного углового, вы просто связать значение tabBadge

<ion-tab [root]="tab3Root" tabIcon="notifications" tabBadgeStyle="red" tabBadge={{totalUnread}}></ion-tab> 
Смежные вопросы