Как установить значение значка в панели вкладок?

190
15

Мне нужно читать данные из 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, но не работал
PLS помочь мне друзей

спросил(а) 2013-11-18T12:33:00+04:00 6 лет, 10 месяцев назад
1
Решение
318

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

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

ответил(а) 2013-11-18T12:38:00+04:00 6 лет, 10 месяцев назад
267

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


Objective-C


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

Свифта


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

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

ответил(а) 2015-02-01T19:18:00+03:00 5 лет, 8 месяцев назад
92

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

ответил(а) 2013-11-18T12:38:00+04:00 6 лет, 10 месяцев назад
58

swift 2.0:


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

ответил(а) 2015-09-12T02:18:00+03:00 5 лет назад
58

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


Ура!

ответил(а) 2014-12-11T21:23:00+03:00 5 лет, 9 месяцев назад
57

Попробуйте следующее:


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

ответил(а) 2013-11-18T12:37:00+04:00 6 лет, 10 месяцев назад
41

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

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


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

ответил(а) 2015-02-24T19:08:00+03:00 5 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема