2013-08-16 91 views
0

我已经创建了一个应用程序有一个视图,tableview和文本视图,我已经设置我的应用程序的方式,当用户点击按钮登录视图时,它将他们带到tableview并点击表格视图中的单元格将它们带到textview。我只用了单一的xib。一切正常。现在,当我导航到表视图时,UIBarButton有3个按钮,回到视图(左),回到表视图(右)和清除按钮(右),当我点击表格视图中的一个单元格时,它将转到文本视图并所有3个按钮仍然存在。我需要的是,当tableview出现按钮回到日志应该隐藏和其他2应该是可见的,当我在textview上,回到主要和回到日志应该是可见的,清除按钮应该隐藏。有没有办法做到这一点?这些是我的代码为UIBarButtons:切换可见性的UIBarButton

UIBarButtonItem *clearHistory=[[UIBarButtonItem alloc]initWithTitle:@"Clear History" style:UIBarButtonItemStyleBordered target:self action:@selector(clearTable)]; 

    UIBarButtonItem *btnBack=[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack)]; 
    self.navigationItem.leftBarButtonItem=btnBack; 

    UIBarButtonItem *btnBacklog=[[UIBarButtonItem alloc]initWithTitle:@"Back to log" style:UIBarButtonItemStyleBordered target:self action:@selector(goBacklog)]; 

    self.navigationItem.rightBarButtonItems=[NSArray arrayWithObjects:clearHistory,btnBacklog, nil]; 


- (void)goBack { 
    self.tableLogView.hidden = YES; 
    self.navigationController.navigationBarHidden=YES; 
    self.viewLogToolbar.hidden=NO; 
    self.extendedView.hidden = YES; 
} 

- (void)goBacklog { 
    self.tableLogView.hidden = NO; 
    self.navigationController.navigationBarHidden=NO; 
    self.viewLogToolbar.hidden=YES; 
    self.extendedView.hidden = YES; 
} 

-(void)clearTable 
{ 
    if([tableData count]) 
    { 
    UIAlertView *message= [[UIAlertView alloc] initWithTitle:@"Delete All History" message:@"Are you sure?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Delete", nil]; 
     [message show]; 
    } 
    else 
    { 
     UIAlertView *message= [[UIAlertView alloc] initWithTitle:@"Message" message:@"No History" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [message show]; 
    } 


} 

回答

0

修改你的代码是这样的:它不隐藏,但实现了完全相同的功能。我希望这是你所期待的。

self.navigationController.navigationBarHidden=YES; 
    UIBarButtonItem *clearHistory=[[UIBarButtonItem alloc]initWithTitle:@"Clear" style:UIBarButtonItemStyleBordered target:self action:@selector(clearTable)]; 
    self.navigationItem.rightBarButtonItem=clearHistory; 

    UIBarButtonItem *btnBack=[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack)]; 
    self.navigationItem.leftBarButtonItem=btnBack; 



- (void)goBack { 
    self.tableLogView.hidden = YES; 
    self.navigationController.navigationBarHidden=YES; 
    self.viewLogToolbar.hidden=NO; 
    self.extendedView.hidden = YES; 

} 

- (void)goBacklog { 
    self.tableLogView.hidden = NO; 
    self.navigationController.navigationBarHidden=NO; 
    self.viewLogToolbar.hidden=YES; 
    self.extendedView.hidden = YES; 

    [self.navigationItem.rightBarButtonItem setTitle:@"Clear" ]; 
    [self.navigationItem.rightBarButtonItem setAction:@selector(clearTable)]; 
} 

将这个代码里面的功能,其中u从tableview中浏览到的TextView

[self.navigationItem.rightBarButtonItem setTitle:@"Back to log" ]; 
[self.navigationItem.rightBarButtonItem setAction:@selector(goBacklog)]; 

如果你仍想保留2个右按钮在数组则只有美国可以做的事情是拨动启用之间的选择两个按钮像

UIBarButtonItem *ubi= [self.navigationItem.rightBarButtonItems objectAtIndex:0]; 

ubi.enabled=NO/YES; 
+0

感谢哥们,我知道我可以指望你:) – Gamerlegend

0

UIBarButton没有hidden财产。

仅显示所需按钮的最简单方法是动态更改self.navigationItem.leftBarButtonItemself.navigationItem.rightBarButtonItem值。也就是说,每次更换屏幕时,都将这些值设置为所需的值。如果你改变的过程中要动画,使用

[self.navigationItem setLeftBarButtonItem:actualBarButton animated: YES] 

表达,而不是简单的财产分配。