所以,我有一个ViewController
,其中TableView
填充了一个数组(_vinhoArray
),另一个TableViewController
会在用户点击第一行时打开ViewController
。
我想要的是为所选行的名称设置第二个视图(TableViewController
)的标题。
在第一篇中我有这段代码。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *selectedRow = [_vinhoArray objectAtIndex:indexPath.row];
// SubTable is the name of Second View
SubTable *subTable = [[SubTable alloc] init];
subTable.titleView = selectedRow;
}
在第二个视图中,a具有属性集
@property (nonatomic, strong) NSString *titleView;
在-(void)viewDidLoad
我有这段代码
self.title = titleView;
但是第二个视图的标题中没有显示任何内容(TableViewController
)
多数民众赞成!请帮忙
答案 0 :(得分:0)
可能发生的是在设置titleView
属性之前加载视图。当您在viewDidLoad中静态设置标题时,不会显示任何更改。您可以通过输入几个断点并查看正在进行的呼叫的顺序来确认这一点。
对此的一个解决方案是使用更动态的方法来设置表。在第二个视图控制器中创建自定义访问者:
- (void)setTitleView:(NSString *)title {
_titleView = title; // This sets the backing iVar
self.title = titleView;
}
现在,无论何时设置属性,都会应用更改,即使它是在视图加载后也是如此。
您不需要声明方法或iVar,这些是通过自动合成设置的;您只是覆盖了属性设置器的默认实现。
答案 1 :(得分:0)
您确定设置.title属性是您想要的吗?如果你在UINavigationController中,你可能真的想要
self.navigationItem.title
代替。设置标题与标题的来源无关,因此我将努力让第二个View Controller显示您选择的静态标题,然后转向从第一个VC动态传递标题的任务。您的问题可能在于设置标题字符串,而不是如何将该字符串从VC 1传递到VC 2。
看起来很明显,UIViewController的.title属性并不总是实际导致显示标题字符串......实际使用该属性的规则变得棘手。
答案 2 :(得分:0)
我假设“titleView
”只是类型NSString
。
在SecondViewController.h
,synthesize
您的titleView
财产中。
NSLog
将SecondViewController
分配给self.title
,然后再将其分配给{{1}},以检查它是否获得了我们尝试分配的值。
希望这有帮助!
答案 3 :(得分:0)
如果您只想在要呈现的视图控制器的导航栏上设置标题,则无需为其创建属性。你可能想做这样的事情:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *titleString = [_vinhoArray objectAtIndex:indexPath.row];
// SubTable is the name of Second View
SubTable *subTable = [[SubTable alloc] init];
subTable.title = titleString;
[self.navigationController pushViewController:subTable animated:YES];
}
以上似乎是实现这一目标的最简单,最直接的方式。另外,将变量类型命名为NSString与其他类类型(如titleView或titleLabel)非常不同。类似于“titleString”的东西,就像我使用的那样,对于阅读代码的人来说会更合适,也不会让人感到困惑。