0

「FirstViewController」というテーブルビューがあり、テーブル内のいずれかのセルを選択すると、「SecondViewController」にプッシュされます。SecondViewControllerには「randomTitle」という名前のUILabelがあり、FirstViewControllerで選択したセルに基づいて変更する必要があります。

したがって、選択したセルの名前が「ランダム行」の場合、UILabelをそれに変更する必要があります。

私はこれまであまり運がなくてこれを試しました。これはFirstViewControllerに含まれます。

SecondViewController *secondView = [[SecondViewController alloc] init];
secondView.randomTitle.text = @"Test"; // hardcoding it for now

[self.navigationController pushViewController:secondView animated:YES];

ただし、ラベルは変更されません。私は何が欠けていますか?ペン先は正しく接続されています。SecondViewControllerの.hは次のようになります。

@interface SecondViewController : UIViewController
{
    UILabel *randomTitle;
}

@property (nonatomic, retain) IBOutlet UILabel *randomTitle;
4

3 に答える 3

1

おめでとう、あなたはそのようなおかしなバグにつながる何かに遭遇したばかりで、これは「問題なく nil の任意のメソッドを呼び出すことができる」と呼ばれています。

テキストをラベルに設定しても、まだアウトレットに設定されていません (コントローラがビューのロードを開始していないため、プッシュした直後にロードされます)。

コードをクリーンでメンテナンスしやすい状態に保つために、テキスト (または、選択した行に関連付けられたモデル) を保持するプロパティを作成し、それを 2 番目のコントローラーの viewWillAppear で使用してプレゼンテーションを構成することをお勧めします。

PS私が正しいことを証明するには、プッシュの後にテキストの割り当てを入れてください:)

于 2012-11-09T02:34:36.573 に答える
0

textプロパティを設定するまでに、ラベルが適切に初期化されていないようです。SecondViewControllerのinitメソッドに次のコードを追加します。

randomTitle = [[UILabel alloc] init];

IBに適切に接続されていると仮定すると、randomTitleラベルは、IBで設定したすべてのプロパティを引き継ぎます。いずれの場合もalloc-init、FirstViewControllerメソッドで行うように、テキストを設定する前に、ラベルを明示的に設定する必要があります。

于 2012-11-09T02:30:16.773 に答える
0

注:ストーリーボード/セグエを使用してこれがどのように機能するかは知っていますが、セグエなしでビューをプッシュする場合、次は2番目のビューコントローラーで機能するはずですが、最初のビューコントローラーでいくつかの調整を行う必要があります

(nonatomic, copy)のプロパティを使用しますNSString

.h2 番目のビュー コントローラーのファイルでNSString、「転送文字列」として機能する を作成します。

@property (nonatomic, copy) NSString *transferString;

Second View Controllerの.mファイルで、合成と割り当て解除など、およびviewDidLoadで:

-(void)viewDidLoad
{
    [super viewDidLoad];

    randomTitle.text = transferString;
}

これにより、入力に基づいて必要な特定のテキストが表示されます。テキストを渡すには、First View Controller に移動する必要があります。これらはすべてファイルで行われ.mます。まず、2 番目のビュー コントローラーをインポートします。

#import "SecondViewController.h"

そしてあなたのセグエのために:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SegueName"]) 
    {        
        [[segue destinationViewController] setTransferString:[NSString stringWithFormat:@"%@", [yourArray objectAtIndex:yourTableView.indexPathForSelectedRow.row]]];
    }
}

yourArray入力に使用した NSArray はどこにありますかyourTableView

于 2012-11-09T02:36:24.003 に答える