3

我有两个视图控制器。在第一个视图控制器中,我有名称列表。当我单击它时,我希望在第二个视图控制器中显示相同的名称。

我有以下代码。

-(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;

我所期待的是,当我单击 say 时,我会在 UILabel 和 UINavigationBar 中Name 1看到文本。Name 1但是我只Name 1在导航栏上看到而不是在 UILabel 上看到。

4

2 回答 2

4

不建议在程序流的那个点访问 UIView 项。设置 prop.detailLabel.text 的值时,视图可能尚未加载。稍后加载视图时,UIView 将使用 IB 中的 XIB 文件中给出的默认设置进行更新。

你应该设置一个 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 属性,但要实现一个自定义设置器-(void)setPropName:(NSString)propName;,您可以在其中设置属性(如果您自动合成,则可能是 _propName)并设置 UILable 文本以及在 viewDidLoad 中设置 UILable 文本。

于 2013-01-21T09:35:51.713 回答
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];
于 2013-01-21T09:38:29.820 回答