嘿,我刚才有一个关于XCode行为的问题,多个视图实现了我自己创建的同一个UIView类。我正在使用选项卡式应用程序和控制器,我在故事板上有多个视图,所有这些视图都实现了我创建的类。在其中一个视图中,我有一个文本字段和一个按钮,另一个视图中,我有一个文本视图,其启动文本显示为“Waiting ...”。您可能猜到,我想在第一个视图的文本字段中输入文本,按下按钮,然后在另一个视图的textview中显示正确的输出文本。
我的问题是:在多个视图之间实现同一个类是否存在问题?
我已经研究过很多关于在其中设置文本的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
答案 0 :(得分:1)
如果您有多个视图由同一个视图控制器控制,它们将不会按照您尝试制作它们的方式相互通信。当你调用[output setText:input.text]时,你会说:为你当前所在的视图设置输出文本字段的文本。
解决这个问题的一种有点愚蠢的方法是创建第二个视图控制器并让它继承你的“主人”。变量默认设置为受保护,并在子类化时保留其信息。
但是,如果要在不同的视图控制器之间进行正确的通信,则应在此问题中查看状态注入:What's the best way to communicate between view controllers?或使用NSNotification中心等通信系统。或者你可以使用NSCoding,所有这些都很容易实现。