1

(送信者) から(受信者) にNSString( message)を渡そうとしています。ViewControllerMyViewController

メソッドを使用して送信しているMyViewControllerin ViewControllercalledのインスタンスを作成しました。testViewContollerNSStringsetTitle:

MyViewController *testViewController = [[MyViewController alloc] init];
[testViewController setTitle:message];

ここにありMyViewController.hます:

- (void)setTitle:(NSString*)title;

ここにありMyViewController.mます:

- (void)setTitle:(NSString*)title {

_testField.text = title;

}

なぜこれが機能しないのか完全にはわかりませんが、呼び出されるviewDidLoad前の読み込みに関係していると思います。setTitle:

あなたが提供できるどんな助けも大歓迎です。

ありがとうございました。

4

3 に答える 3

0

どこで_testField作成されますか?にある場合viewDidLoadnil、 を呼び出したときですsetTitle。これは、no op であることを意味します。 viewDidLoadビューがウィンドウに追加されたときに呼び出さinitviewDidLoadます。

MyViewController目的のフィールド テキストであるプロパティを定義してから、次のよう_testField.text = titleにしviewDidLoadます。

MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;

- (void)viewDidLoad {
     [super viewDidLoad];

     // do something to initialize _testField here

     _testField.text = title;
}

また、UIViewControllerすでに呼び出されたプロパティがtitleあり、オーバーライドsetTitle:すると予期しない副作用が発生する可能性があることに注意してください。

于 2013-04-24T02:05:55.040 に答える
0

これは基本的に、メモリが に割り当てられるタイミングに関連してい_testFieldます。プログラム_testFieldで inを作成する場合viewDidLoad

MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;

メモリがまだ割り当てられていないため、これらの 2 行は役に立ちませ_testField so the text cannot come up.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    {

            SecondViewController *obj = segue.destinationViewController;
            [obj setTitle:@"New Title"];
    }

メモリが再び割り当てられないため、これも役に立ちません。この問題の簡単な解決策は次のとおりです。

  1. たとえば、次のようMyViewControllerに設定する前に、のビュー プロパティにアクセスします。_testField

    MyViewController    *obj = [[MyViewController alloc] init];
    [self.navigationController pushViewController:obj animated:YES];
    [obj setTitle:@"New Title"];
    
  2. の に文字列を設定し@propertyMyViewControllerプロパティの文字列を に再割り当てします_testField

はい、setTitleのプロパティUIViewControllerです。カスタマイズすると、デフォルトのプロパティが台無しになります。安全にプレイしてください... :)

于 2013-04-24T03:14:13.197 に答える
-1

最初のViewControllerでは、これを次のように使用しています

SecondViewcontroller *MyViewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"SecondViewcontroller"];
MyViewController.Title = @"Welcome";
[self presentViewController:MyViewController animated:YES completion:Nil];

secondViewcontroller では、次を使用します

編集する secondViewcontroller.h ファイル

@interface SecondViewcontroller : UIViewController
    @property (strong, nonatomic) NSString *Title;
@end

次に、Title 値を secondviewcontroller に出力します

于 2015-11-02T11:35:20.913 に答える