0

ストーリーボードを使用して、2 つの異なるビュー コントローラー (A&B) を設定しました。そのうちの 1 つ (B) には UITextView があります。

View Controller Aからテキストビューのテキストにアクセスして変更するにはどうすればよいですか?


以下のコードではエラーは発生しませんが、関数が正しく呼び出されてもテキストが設定されていません。

[self.desc setText:text];ViewControllerB の viewDidLoad 内で実行すると動作します。

ViewControllerA.h

@interface ViewControllerA : UIViewController
{
}

@end

ViewControllerA.m

#import "ViewControllerA.h"
#import "ViewControllerB.h"
@interface ViewControllerA ()
@end

@implementation ViewControllerA
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        ViewControllerB *bInstance = [[ViewControllerB alloc] init];
        [bInstance setDescription:@"this is some new text";
    }
@end

ViewControllerB.h

@interface ViewControllerB : UIViewController
{
    UITextView *desc;
}
- (void)setDescription:(NSString *) text;
@property (nonatomic, retain) IBOutlet UITextView *desc;
@end

ViewControllerB.m

#import "ViewControllerB.h"

@interface ViewControllerB ()

@end

@implementation ViewControllerB
@synthesize desc;

- (void)setDescription:(NSString *)text{
    NSLog(@"called!");
    [self.desc setText:text];
}

@end
4

4 に答える 4

3

別のView Controllerのビューを操作しないでください。これは一般的に悪い設計であり、まったく機能しないことがよくあります (ご存じのとおり)。

代わりに、2 番目のビュー コントローラーで文字列プロパティを設定します。それを設定します (ストーリーボードを使用している場合は、prepareForSegue で)。

次に、2 番目のビュー コントローラーの viewWillAppear で、文字列をテキスト フィールドに入力します。

于 2013-09-22T23:46:55.253 に答える
0

bInstance は、クラスの別のインスタンスです。同じものではありません。

于 2013-09-23T14:06:42.253 に答える