【问题标题】:Using storyboarding in xCode how can I change the value of a label from a different view?在 xCode 中使用故事板如何从不同的视图更改标签的值?
【发布时间】:2015-08-20 23:02:26
【问题描述】:
我正在编写一个使用故事板的应用,我想通过单击前一个视图中的按钮来更新一个视图中的标签。
_label.text = variable1;
是我用来更改标签值的行,当我单击按钮时,它在下一个视图中。使用这种方法,我可以轻松地更改与按钮相同的视图中的标签,但是当我转到下一个视图并看到空标签时,它什么也不做。
我尝试到处寻找并发现了类似的问题,但找不到任何对我有用的东西,所以任何解决方案都将不胜感激!
【问题讨论】:
标签:
ios
objective-c
storyboard
【解决方案1】:
很遗憾,无法在情节提要的不同场景之间连接IBOutlets。
很难提出一些精确的解决方案,因为您必须提供有关您拥有的设置的更多详细信息。尽管如此,还是可以概述一些可能的解决方案:
使用prepareForSegue
如果您要修改的视图控制器在执行segue后出现,您可以在prepareForSegue函数中自定义其外观。
使用委托
您可以将想要修改另一个视图控制器的视图控制器指定为其委托。比如ViewController1要修改ViewController2:
@interface ViewController1: UIViewController {}
@property (nonatomic,weak) ViewController2 *controllerThatIWantToModify;
通过这样的设置,您可以调用:
self.controllerThatIWantToModify.label.text = variable1;
【解决方案2】:
您使用情节提要,因此从您的第一个 viewController(带有按钮)到您的第二个(带有标签)之间必须有一个 segue。
如果是这种情况,您可以通过第一个视图控制器的prepareForSegue 方法设置第二个视图控制器的标签。
使用 segue 对象调用此方法,该对象具有 destinationViewController 属性,这是您的第二个视图控制器。
如果你有几个来自这个viewController的segue,你应该检查它是否是正确的segue然后设置它。
为此,您需要设置可以让您从 viewController 访问标签的 outlet。
然后您可以在视图控制器中编写setUpLabelsWith:(NSString)text1 ... 方法,或者直接从第一个视图控制器访问插座(假设它们不是私有的)。
是的,这假设您的第二个视图控制器有一个自定义类。