2013-02-12 33 views
0

我有两个视图,我试图显示文本,我从第一个视图得到另一个UITextField。由 - (source)显示的第二个视图,所以方法ViewWillAppear和ViewDidLoad将不起作用。第二个视图的viewDidLoad方法在app启动时运行。设置UITextField.text从另一个类

我试图让法第二类

secondClass.h:

@property (strong, nonatomic) IBOutlet UITextField *itemName;//all hooked up in storyboard 
-(void)SetName:(NSString *)name; 

secondClass.m:

-(void)SetName:(NSString *)name{ 
    NSLog(@"%@",name); 
    itemName.text = name;//itemName - textField 
} 

,并第一个使用它:

secondViewConroller *secondView = [[secondViewConroller alloc]init]; 
[secondView SetName:@"Bill"]; 

NSlog显示“Bill”,但textField.text不会改变任何内容。

我的猜测是应用程序显示的UITextField没有变化,因为它表明,从viewDidLoad方法得到第二种观点,我需要更新它在某种程度上

我的问题:什么是改变UI元素的属性,最好的方法来自不同的班级?

回答

0

所以我找到了一个解决方案:调用方法SetName时出现了一些问题:带有从第一个UIViewController获得的参数。

基本上解决方法是:创建NSObject并从第一个UIViewConroller中放入值,然后在第二个中使用它。

TUTORIAL帮我解决了这个问题。

0

最简单的方法:

secondViewConroller.h:

@property NSString * conversationName; 

secondViewConroller.m:

@synthesize conversationName; 

-(void)SetName:(NSString *)name{ 
    NSLog(@"%@",name); 
    itemName.text = conversationName 
} 

在页头:

secondViewConroller *secondView = [[secondViewConroller alloc]init]; 
conversationName = @"Set this text"; 
[secondView SetName:@"Bill"]; 

我建议你阅读有关协议后那个。

+0

它基本上和我写的一样,但是有nsstring属性。我有同样的结果 – ignotusverum 2013-02-13 08:39:01

0

最简单的方法:在 secondViewConroller.h:

@property (nonatomic, retain) NSString *stringName; 

secondViewConroller.m:

@synthesize stringName; 

和你写的这条线

itemName.text = stringName 

在页头viewDidLoad方法:

secondViewConroller *secondView = [[secondViewConroller alloc]init]; 
secondView.stringName = @"Set this text"; 
+0

正如我在我的问题所说,方法viewDidLoad启动时启动应用程序 – ignotusverum 2013-02-13 08:40:29

+0

对不起,我真的不明白这个问题。 – ignotusverum 2013-02-13 10:42:48

+0

如果他想编辑现有的viewController的属性怎么办?我会建议使用委托方法创建协议。 – pbibergal 2013-02-13 15:36:42

0

如果您的itemName变量出现在nslog中,则说明您的itemName有问题。 您是否在界面生成器中为文本字段创建了引用插座? 否则,你可以通过标签得到正确的文本框,在IB把对文本字段实例标记1和在代码中完成:

UITextField *tf=(UITextField*)[self.view viewWithTag:1]; 
tf.text=name; 

(更换自我。查看持有文本框的视图,如果不是直接在主视图中)

+0

文本字段正在工作,如果我改变它在第二类(它创建的地方)。问题是从第一类 – ignotusverum 2013-02-13 15:23:50

+0

改变它什么时候显示secondView?在setname调用之后? – karel 2013-02-13 17:16:09

+0

顺便说一句,你现在有一个错字在你的问题:SetName和SetItemName,其中一个或另一个,但不是两个;-) – karel 2013-02-13 17:18:55