从另一个控制器的 UIPickerView 更新 UIButton 的标题

Posted

技术标签:

【中文标题】从另一个控制器的 UIPickerView 更新 UIButton 的标题【英文标题】:Update the title of a UIButton from a UIPickerView from another controller 【发布时间】:2014-06-30 21:01:26 【问题描述】:

我有一个名为NotepadView.h/.mViewController 和一个标题为“用户:(选择)”的UIButton。一旦用户触摸按钮,UIPickerView 就会作为弹出框出现,它是从 UserPickerViewController.h/.m 初始化的。单击按钮后,选择器中将出现正确的行。但是在实现IBAction 之后(点击按钮,从选择器中选择正确的行,然后离开选择器),按钮标题只会在再次按下按钮后更新。

我知道这是因为我正在使用touch up inside 操作,所以一旦触摸按钮,标题立即更改为“用户:(null)”,直到在正确的行被第二次触摸之后在选择器中选择。如何实现动作,以便选择选择器行时,它立即更改按钮标题,而不是用“用户:(null)”填充它,直到我再次触摸它?

另外,在选择行后,我将如何退出UserPickerViewController.m,除了触摸选择器视图之外,又回到NotepadView.m

NotepadView.mviewDidLoad:

[_userBTN setTitle: @"User: (Select)" forState: UIControlStateNormal];

IBAction 的内部修饰下:

- (IBAction)refreshUsername:(id)sender 
    [_userBTN setTitle: [NSString stringWithFormat:@"User: %@",gUserInfo.chosenUserName] forState: UIControlStateNormal];

UserPickerViewController.m:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 

NSArray *userArray = [gUserInfo availableUsers];
gUserInfo.chosenUserName = [userArray objectAtIndex:row];


【问题讨论】:

第二个函数中的gUserInfo是什么? 这是一个具有属性chosenUserName 的对象,这样我就可以跨我的所有控制器访问该数组/@Danqing 在哪里声明的?它是全球性的吗? 是的,它是全局的并且工作正常,因为我可以在选择器@danqing 中看到我的用户名数组 你试过在pickerView的didSelectRow方法中设置按钮标题吗? 【参考方案1】:

按照@JasonMcDermott 的建议,我将UserPickerViewController.m 更改为包含一个名为“Save”的UIBarButton。按下按钮后,使用 unwindSegue(选择器行中的字符串)将存储在名为 user 的变量中,然后在 touchUpInside 上将其转移到 NotepadView.m

【讨论】:

以上是关于从另一个控制器的 UIPickerView 更新 UIButton 的标题的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 ViewController 重新加载 UIPickerView 的数据

从另一个视图控制器更新 UIPageControl

从另一个视图控制器更新 UITableView 数据单元格

从另一个类 Swift 更新视图控制器的 UI [关闭]

从另一个视图控制器更新视图控制器的内容而不打开它

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?