从另一个类设置UITextField.text

时间:2013-02-12 23:02:51

标签: iphone ios objective-c xcode

我有两个观点,我正在尝试显示我从另一个UITextField的第一个视图中获得的文字。第二个视图显示为 - (source)所以方法ViewWillAppear和ViewDidLoad不起作用。并且在启动应用程序时运行第二个视图的viewDidLoad方法。

我试图制作第二类方法

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显示“比尔”,但textField.text不会改变任何内容。

我的猜测应用程序显示UITextField没有更改,因为它显示了从viewDidLoad方法获取的第二个视图,我需要以某种方式更新它

我的问题:更改不同类别的UI元素属性的最佳方法是什么?

4 个答案:

答案 0 :(得分: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"];

我建议你在此之后阅读有关协议的内容。

答案 1 :(得分:0)

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

@property (nonatomic, retain) NSString *stringName;

secondViewConroller.m:

@synthesize stringName;

并在viewDidLoad方法中编写此行

itemName.text = stringName

关于分配:

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

答案 2 :(得分:0)

如果你的itemName变量似乎到达了nslog,那么你可能会出现问题。 你是否在文本域的界面构建器中创建了一个引用插座? 否则你可以通过标签获得正确的文本字段,在IB中放置文本字段上的标签1并在代码中执行:

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

(如果没有直接在主视图中,则将self.view替换为包含文本字段的视图)

答案 3 :(得分:0)

所以我找到了一个解决方案:调用方法SetName有问题:我从第一个UIViewController获取参数。

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

TUTORIAL帮助我解决了这个问题。