从另一个控制器的 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/.m
的ViewController
和一个标题为“用户:(选择)”的UIButton
。一旦用户触摸按钮,UIPickerView
就会作为弹出框出现,它是从 UserPickerViewController.h/.m
初始化的。单击按钮后,选择器中将出现正确的行。但是在实现IBAction
之后(点击按钮,从选择器中选择正确的行,然后离开选择器),按钮标题只会在再次按下按钮后更新。
我知道这是因为我正在使用touch up inside
操作,所以一旦触摸按钮,标题立即更改为“用户:(null)”,直到在正确的行被第二次触摸之后在选择器中选择。如何实现动作,以便选择选择器行时,它立即更改按钮标题,而不是用“用户:(null)”填充它,直到我再次触摸它?
另外,在选择行后,我将如何退出UserPickerViewController.m
,除了触摸选择器视图之外,又回到NotepadView.m
?
NotepadView.m
下viewDidLoad
:
[_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 的标题的主要内容,如果未能解决你的问题,请参考以下文章