问题
i have to read datas from xml and have to display values in view controller. am using tab barcontroller . where i have to read xml data and have to display it in tab bar as badge. here is my controller code.
-(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];
}
Here am reading a value from XML
mycount = [attributeDict objectForKey:@"count"];
I dont know to display in tab bar as badge. i tried to display it under ViewdidLoad but didnt worked pls help me friends
回答1:
Let me tell you the simplest way to set badge value :
[[self navigationController] tabBarItem].badgeValue = @"YourBadgeValue";
回答2:
Vineet Singh's answer is good if you want to change the badge for the current tab. If instead you need to change the value for another tab you have in your tab bar, use the following:
Objective-C
[[self.tabBarController.tabBar.items objectAtIndex:0] setBadgeValue:nil];
Swift
tabBarController?.tabBar.items?[0].badgeValue = nil
Remember to replace the index I used with the actual tab you want to edit the value for.
回答3:
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
UITabBarItem *tbItem = (UITabBarItem *)[appDelegate.tabBarController.tabBar.items objectAtIndex:tabIndex];
tbItem.badgeValue = [NSString stringWithFormat:@"%i", count];
回答4:
Try this:
tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",count];
回答5:
swift 2.0:
self.navigationController!.tabBarItem.badgeValue = "YourBadgeValue"
回答6:
I see some answers about setting this on the TabItem, but if the tab has never been loaded the viewDidLoad function will never get loaded. This is especially important when you are trying to create a background process such as push notification handling set a tab's badge. It's much more likely you will need your TabViewController to handle the badge setting. Tags on the TabItem seem more appropriate and then flip through the tabs until you find the one you want to update.
Cheers!
回答7:
int indexOfTabbarItem = 0;
NSString *badgeValue = [NSString stringWithFormat:@"%lu", (long)countUnreadMessages];
[[[[self viewControllers] objectAtIndex:indexOfTabbarItem] tabBarItem] setBadgeValue:([badgeValue isEqualToString:@"0"]) ? nil : badgeValue];
This worked for me. Some times you have to find the right controller and then its item to set it. Cheers.
回答8:
For ionic angular, you just bind the value to tabBadge
<ion-tab [root]="tab3Root" tabIcon="notifications" tabBadgeStyle="red" tabBadge={{totalUnread}}></ion-tab>
来源:https://stackoverflow.com/questions/20044345/how-to-set-badge-value-in-tab-bar