我有两个视图控制器。在第一个视图控制器中,我有名单。当我点击它时,我希望在第二个视图控制器中显示相同的名称。
我的代码如下。
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// PropDetailViewController is second view controller
PropDetailViewController *prop = [self.storyboard instantiateViewControllerWithIdentifier:@"prop"];
ListOfProperty *propList = [propListFinal objectAtIndex:indexPath.row];
NSString *myText = [NSString stringWithFormat:@"%@", propList.addressOfFlat];
prop.detailLabel.text = myText;
prop.title = myText;
[self.navigationController pushViewController:prop animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
在PropDetailViewController
中,我有@property (retain, nonatomic) IBOutlet UILabel *detailLabel;
。
我期待的是当我点击说Name 1
时,我会在UILabel和UINavigationBar中看到Name 1
作为文本。但是我只在导航栏上看到Name 1
而在UILabel上看不到。
答案 0 :(得分:4)
不建议在程序流程中的那一点访问UIView项目。设置prop.detailLabel.text的值时,可能尚未加载视图。稍后加载视图时,将使用IB中XIB文件中给出的默认设置更新UIView。
你应该设置NSString属性,比如说
@property (retain, nonatomic) NSString *propName;
在按下视图控制器之前分配它。但是使用此属性而不是UILable。在viewDidLoad的PropDetailViewController中执行以下操作:
(void) viewDidLoad {
// call super viewDidLoad and all the works ...
self.detailLabel.text = propName;
}
您可以使用viewWillAppear代替viewDidLoad。因为在分配属性的值时可以执行viewDidLoad。
如果您想要保存,那么请发明一个新的init方法,您可以在其中移交要预先设置的所有值。 但是我从来没有把它与故事板结合起来(你可以使用实例化而不是初始化......)因此我无法提出任何建议。
另一种干净的方法是坚持使用propName属性,但要实现自定义setter -(void)setPropName:(NSString)propName;
,您可以在其中设置属性(如果自动合成,可能是_propName)并设置UILable文本并在viewDidLoad中设置UILable文本。
答案 1 :(得分:1)
试试这个: 在.h
@property (retain, nonatomic) NSString *detailText;
PropDetailViewController.m
中的
使用
更改代码行 NSString *myText = [NSString stringWithFormat:@"%@", propList.addressOfFlat];
prop.detailText = myText;
prop.title = myText;
ViewDidLoad中的:
[self.detailLabel setText:self.detailText];