有关UINavigation的东东

在APP中,我采用的是navigation+tableview的模式,因此,当cell view controller里头产生了某些数据变化的时候,tableview(root controller)应该也可以自动刷新才对。

 

不过,因为navigation controller的机制,tableview中点击cell后,push到新的view controller之后再想回到前一个页面,通过的是点击navigationitem的leftbutton。而这个机制则是类似PC浏览器的后退按钮而已。所以,当页面跳转到root controller的时候,需要强制刷新才可以。

 

而原本的做法,是

-(void)viewWillAppear:(BOOL)animated {

    [self.tableView reloadData];

}

 

 

不过就像刚才所说的“后退机制”,其实这个命令,并没有第二次执行,所以当在第二层cell view controller中后退到root时,并不会同步刷新。

 

因此,可以使用下面这个方法(在root controller的.m文件中):

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    [self.tableView reloadData];

}

 

不过在此之前,需要预先设置代理,即在viewDidLoad当中预先设定好

self.navigationController.delegate = (id)self;

 

注意:

由于这个方法是写在root controller的.m文件中,因此每当点击cell,push进cell view controller当中时,这个方法都会被重复调用。因此,如果只想在root controller中使用此方法,本人的做法是进行判断

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if([viewController isKindOfClass:[oneController class]]) {
    //新方法,用于判断所在,可以根据不同的文件进行不同的运行
    [self.tableView reloadData];
  } //
if(navigationController.viewControllers.count == 1) {//如果为1,则代表当前处于root层 // [self.tableView reloadData]; // } }

不过此方法目前只能对root controller使用(根据判断条件),目前还未找到如何进行定制判断(对不同cell view controller的单独判断)的方法。

转载于:https://www.cnblogs.com/yy-is-ing/archive/2012/08/27/2658340.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值