3

私は2つのView Controllerを持っています。最初のView Controllerには名前のリストがあります。それをクリックすると、同じ名前が2番目の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;ます。

私が期待していたのは、 say をクリックするとName 1Name 1UILabel と UINavigationBar にもテキストとして表示されることです。ただし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;

} 

viewDidLoad の代わりに、viewWillAppear を使用できます。プロパティの値を割り当てると、viewDidLoad はすでに実行されている可能性があるためです。

保存側になりたい場合は、事前に設定したいすべての値を渡す新しい init メソッドを発明してください。しかし、私はストーリーボードと組み合わせてそれを行ったことはありません(initではなくinstantiateを使用できます)。したがって、頭のてっぺんからアドバイスを与えることはできません。

別のクリーンなアプローチは、propName プロパティに固執する-(void)setPropName:(NSString)propName;ことですが、プロパティ (自動合成する場合はおそらく _propName) を設定し、UILable テキストを設定し、viewDidLoad 内で UILable テキストを設定するカスタム セッターを実装することです。

于 2013-01-21T09:35:51.713 に答える
1

これを試してください: in .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 に答える