在 didSelectRowAtIndexPath 中以编程方式编辑控制器的标题

Posted

技术标签:

【中文标题】在 didSelectRowAtIndexPath 中以编程方式编辑控制器的标题【英文标题】:Programmatically edit title of controller in didSelectRowAtIndexPath 【发布时间】:2012-11-22 04:38:57 【问题描述】:

以前,我尝试使用以下代码转到另一个控制器但失败了

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    RowDetail *rd = [[RowDetail alloc]initWithNibName:@"RowDetail" bundle:nil];
    if ([[allRow objectAtIndex:indexPath.row] is Equal:@"One"]) 
    
        [rd setTitle:[allRow objectAtIndex:indexPath.row]];
    
    [self.navigationalController pushViewController:rd animated:NO];

我正在使用情节提要,所以我发现其他代码对我有用,但我无法为我正在推送的控制器设置标题。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryBoard" bundle:nil];
    RowDetail *rd = [sb instantiateViewControllerWithIdentifier:@"RowDetail"];
    if ([[allRow objectAtIndex:indexPath.row] is Equal:@"One"]) 
    
        [rd setTitle:[allRow objectAtIndex:indexPath.row]];
    
    [self.navigationalController pushViewController:rd animated:NO];

它工作并显示了 RowDetail 控制器,但我无法编辑标题。知道如何做到这一点吗?

编辑: RowDetail.h

#import <UIKit/UIKit.h>

@interface LecturerDetail : UIViewController

@property (weak, nonatomic) IBOutlet UINavigationBar *rowNavBar;

@property (nonatomic, strong) NSString *lecDetailTitle;
@end

对于 RowDetail,我尝试使用 IBOutlet 作为导航栏,但失败了。我仍在尝试让标题显示的方法。

【问题讨论】:

请看我的更新更容易 【参考方案1】:

在 RowDetailViewController 中

@property (nonatomic, strong) NSString *rowDetailTitle;
//synthesize in .m file too

然后

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryBoard" bundle:nil];
    RowDetail *rd = [sb instantiateViewControllerWithIdentifier:@"RowDetail"];
    rd.rowDetailTitle = @"yourTitle";
    [self.navigationalController pushViewController:rd animated:NO];

然后在视图中确实加载了 RowDetailViewController.m

self.navigationItem.title = rowDetailTitle;

希望对你有帮助,请反馈一下,谢谢。

更新:或者干脆这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryBoard" bundle:nil];
    RowDetail *rd = [sb instantiateViewControllerWithIdentifier:@"RowDetail"];
    rd.navigationItem.title = @"yourTitle";
    [self.navigationalController pushViewController:rd animated:NO];

【讨论】:

两种方法都试过了,还是不显示标题画面 我可以看看你的 RowDetailViewController.h 吗? rowNavBar.title = self.navigationItem.title;在 RowDetailViewController.m 的 viewdidload 中 rowNavBar.topItem.title = self.navigationalItem.title; 我误读了你的 .h 文件,所以结论 UINavigationBar 使用 navBar.topItem.title = @"title";但是如果 UINavigationItem 像我说的那样做:)

以上是关于在 didSelectRowAtIndexPath 中以编程方式编辑控制器的标题的主要内容,如果未能解决你的问题,请参考以下文章

tableView - didSelectRowAtIndexPath 未调用

在 didSelectRowAtIndexPath 中呈现缓慢的 ViewController

我可以麻烦UITableViewDelegate的didSelectRowAtIndexPath:吗?

在 didselectRowAtIndexPath 之后 UITableView 无法滚动底部

在 tableView 上使用 CustomCell,如何调用 didSelectRowAtIndexPath?

didSelectRowAtIndexPath 不会在 ViewController 中触发