将一个视图textfied值设置为另一个视图标签

Rit*_*esh 2 objective-c

我在第一个视图中有textfield和Button.当我单击Button时,它导航第二个视图.我有一个标签.我的问题是我想将文本字段值设置为标签文本?

Plz帮帮我!

Sur*_*h.D 5

通过创建一个ivar来引用特定类型(如标签或其他视图控制器),您可以将不需要耦合的事物耦合在一起.你可以做的是让你的第一个标签视图控制器成为你的第二个标签视图控制器的委托.所以在你的app委托中做这样的事情.

OptionsViewController *optionsViewController = // ... get this from the tab view
FirsTabViewController *firstTabViewController = // ... same here

[optionsViewController setDelegate:firsTabViewController];
Run Code Online (Sandbox Code Playgroud)

这意味着您需要在OptionsViewController中使用ivar:

@property (assign) id delegate;
Run Code Online (Sandbox Code Playgroud)

然后,当您想要触发更改的任何事件发生在选项视图控制器中时,查看该委托是否可以响应您已命名的选择器.例如:

- (void)someEventHappenedLikeTyping:(id)sender;
{
if ([delegate respondsToSelector:@selector(setOptionsString:)]
    [delegate performSelector:@selector(setOptionsString:) withObject:[label text]];
}
Run Code Online (Sandbox Code Playgroud)

请注意,您从未指定任何特定对象类型.您只需检查委托(声明为id)是否可以响应该选择器.如果它可以,它会按照它所说的去做,否则就是沉默.

为此,您需要在FirstTabViewController中为optionsString使用ivar,因此它将在标头中声明为:

@property (copy) NSString *optionsString;
Run Code Online (Sandbox Code Playgroud)

然后在.m中@synthesize它.这会导致-setOptionsString成为将在-someEventHappenedLikeTyping方法中调用的有效选择器.

无论如何,现在,如果您需要更改哪个视图控制器引用哪个,您不必进入标题并更改引用的ivar类型.您只需要在视图控制器中实现选择器(顺便说一下,这称为非正式协议),视图控制器是选项视图控制器的委托.

只是一些值得深思的食物.希望有所帮助.可以在我添加的代码中进行进一步的解耦,但同样对于这样一个简单的任务来说可能有点过分.如果您需要澄清或想通过进一步解耦来理解我的意思,请告诉我.

最好的祝福,

ps有时需要在两个标签栏视图控制器之间共享数据,这意味着您有设计缺陷.如果您想要从选项视图中存储首选项,则应该调用

[[NSUserDefaults standardUserDefaults] setObject:[label text] forKey:@"option1"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

然后,您可以从主选项卡中的NSUserDefaults中拉出;

NSString *option1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"option1"];
Run Code Online (Sandbox Code Playgroud)

//使用option1做一些事情

参考 依据如何从一个视图访问数据到另一个视图?