0

嘿,我刚刚对 XCode 的行为有疑问,多个视图实现了我自己创建的同一个 UIView 类。我正在使用一个选项卡式应用程序和控制器,我在情节提要上有多个视图,所有这些视图都实现了我创建的一个类。在其中一个视图中,我有一个文本字段和一个按钮,在另一个视图中,我有一个带有启动文本的文本视图,上面写着“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

如果您有多个由同一个视图控制器控制的视图,它们将不会以您尝试创建它们的方式相互通信。当您调用 [output setText:input.text] 时,您是在说:为您当前所在视图的输出文本字段设置文本。

解决这个问题的一种有点笨拙的方法是创建第二个视图控制器并让它从你的“主人”继承。变量默认设置为受保护,并在子类化时保留其信息。

但是,如果您想在不同的视图控制器之间正确通信,您应该在这个问题中研究状态注入:在视图控制器之间进行通信的最佳方式是什么?或者使用 NSNotification center 等通讯系统。或者你可以使用 NSCoding,所有这些都相当容易实现。

于 2012-07-05T16:32:01.833 回答