我有两个 View Controller 。在第一个 View Controller 中,我有名称列表。当我点击它时,我希望在第二个 View Controller 中显示相同的名称。
我有以下代码。
-(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 上看不到。
最佳答案
不建议在程序流的那个点访问 UIView 项目。设置 prop.detailLabel.text 的值时, View 可能尚未加载。当稍后加载 View 时,UIView 将使用 IB 中 XIB 文件中给出的默认设置进行更新。
你应该设置一个 NSString 属性,比方说
@property (retain, nonatomic) NSString *propName;
像你一样在推送 View Controller 之前分配它。但是使用这个属性而不是 UILable。在 viewDidLoad 的 PropDetailViewController 中执行以下操作:
(void) viewDidLoad {
// call super viewDidLoad and all the works ...
self.detailLabel.text = propName;
}
您可以使用 viewWillAppear 而不是 viewDidLoad。因为 viewDidLoad 可以在您分配属性值时已经执行。
如果你想站在保存的一边,那么发明一个新的 init 方法,你可以在其中交出你想要预先设置的所有值。 但是我从来没有将它与 Storyboard结合使用(你可以在其中使用实例化......而不是初始化......)因此我无法给出任何建议。
另一种干净的方法是坚持使用 propName 属性,但实现自定义 setter -(void)setPropName:(NSString)propName;
在您设置属性的地方(如果您自动合成,可能是 _propName)并设置 UILable 文本加上在 viewDidLoad 中设置 UILable 文本。
关于objective-c - UILabel 文本没有改变,但是 xx.title 正在工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14435261/