0

ねえ、私が作成した同じ UIView クラスを実装する複数のビューでの XCode の動作について質問がありました。タブ付きのアプリケーションとコントローラーを使用しています。ストーリーボードには複数のビューがあり、そのすべてが作成したクラスを実装しています。ビューの 1 つにはテキスト フィールドとボタンがあり、別のビューには "Waiting..." という起動テキストを含むテキスト ビューがあります。ご想像のとおり、最初のビューのテキスト フィールドにテキストを入力し、ボタンを押してから、適切な出力テキストを他のビューのテキスト ビューに表示します。
私の質問は: 複数のビュー間で同じクラスを実装することに問題はありますか?
内部にテキストを設定する TextView メソッドに関する多くの議論を調査しましたが、フォーラム間の提案はすべて異なることを言っており、どのメソッドも適切に機能していないようです。

[textView setText string]他のタブに切り替えたときに動作したくない、 textView.text = @"Message here"動作しない

ご協力をお願いいたします。参照用にコードを添付しました。

#import "MasterController.h"

@interface MasterController ()

@end

@implementation MasterController
@synthesize input;
@synthesize output;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
    [self setInput:nil];
    [self setOutput:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)generate:(id)sender 
{
    [output setText:input.text];
}
- (IBAction)textFieldReturn:(id)sender
{
    [sender resignFirstResponder];
}
- (void)dealloc 
{
    [input release];
    [output release];
    [super dealloc];
}
@end

//MasterController.h
#import <UIKit/UIKit.h>

@interface MasterController : UIViewController
- (IBAction)generate:(id)sender;
- (IBAction)textFieldReturn:(id)sender;
@property (retain, nonatomic) IBOutlet UITextField *input;
@property (retain, nonatomic) IBOutlet UITextView *output;

@end
4

1 に答える 1

1

同じView Controllerによって制御される複数のビューがある場合、作成しようとしている方法では相互に通信しません。[output setText:input.text] を呼び出すと、現在表示しているビューの出力テキスト フィールドのテキストを設定します。

これを回避するややハックな方法の 1 つは、2 つ目のビュー コントローラーを作成し、「マスター」から継承させることです。変数はデフォルトで保護されており、サブクラス化されたときにその情報を保持します。

ただし、異なるView Controller間で適切に通信したい場合は、次の質問で状態注入を検討する必要があります: View Controller間で通信するための最良の方法は何ですか? または、NSNotification センターなどの通信システムを使用します。または、NSCoding を使用することもできます。これらはすべて、実装が非常に簡単です。

于 2012-07-05T16:32:01.833 に答える