【问题标题】:referencing views elements in xcode iphone programming在 xcode iphone 编程中引用视图元素
【发布时间】:2011-12-26 17:24:31
【问题描述】:

我正在尝试做一些非常简单的事情,但我找不到任何示例并且无法弄清楚。 我正在为 iphone 5 编写 xcode 4。

我的故事板上有 2 个视图。一个有一个按钮(ButtonFromFirstView),它通向我的第二个视图。第二个视图有一个选择器视图对象和一个“选择”按钮。当我单击“选择”时,它会将我带到我的第一个视图。我希望 ButtonFromFirstView 标题成为从第二个视图的选择器中选择的字符串。如何获取选择器视图中选择的值?

在我的第二个视图中,我有以下方法可以捕获选择器中的更改。但是 ButtonFromFirstView 不可用。我怎样才能得到它?如果按钮位于选择器所在的同一视图上,则它可以工作,但这不是我想要的。

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    NSString *SelectedString = [DeparturePickerArray objectAtIndex:row];
    [ButtonFromFirstView setTitle:SelectedString forState:UIControlStateNormal];    
}

【问题讨论】:

  • 顺便说一句,您可能有兴趣知道 Objective-C 中的标准是变量的驼峰式(departurePickerArraybuttonFromFirstView)和类名和常量的 PascalCase(UIPickerView、@ 987654325@).

标签: iphone objective-c xcode


【解决方案1】:

iOS 开发的一般范式是每个“全屏”内容都应该有一个单独的视图控制器。因此,对于两个屏幕中的每一个,您都应该有一个 UIViewController 的子类,而不是 UIView 的子类。

您的问题本质上是 - 您如何在两个视图控制器之间传递信息?在像您这样简单的情况下,最好的方法是将它们从您的应用程序委托类中连接起来。因此,当您创建视图控制器(例如,从 nib 中)时,您希望创建一个您这样调用的方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ... (create view controllers)

    [secondViewController setButtonToUpdate:firstViewController.buttonFromFirstView];

    ....
}

secondViewController 中,您需要保留对firstViewController 拥有的按钮的引用。所以,在头文件中是这样的:

@interface SecondViewController : UIViewController {
    UIButton                                    *buttonToUpdate;
}

@property (nonatomic, retain)   UIButton        *buttonToUpdate;

这是一个简单问题的简单答案,但要“正确”做事,您可能希望删除两个视图控制器之间的依赖关系,并考虑使用正式或非正式协议。

此外,iOS 使用 MVC(模型-视图-控制器),这将规定 SecondViewController 应首先将字符串从选取器发送到某个模型类,然后该模型类可能会通知诸如 FirstViewController 之类的观察者其数据已已更新。

这有意义还是您需要更完整的解释?

【讨论】:

  • 您提到了关于正式/非正式协议的一个好点。我来自WEB开发背景。我一直在使用 MVC 模式。视图不依赖于 WEB。我通常会使用 SESSIONS 或 DB 来存储信息并传递给其他视图。我可以使用类似的技术吗,例如使用文件存储值或 SQLlite?
  • 是的,你可以。我自己没有使用 SQLite 的经验,但是看看 Core Data - 我相信它可以使用 SQLite 进行存储。
【解决方案2】:

观看 WWDC 2011 会议视频中的“Introducing Interface Builder Storyboard”:https://developer.apple.com/videos/wwdc/2011/。它向您展示了如何在 iOS 中管理一系列视图(或更准确地说是视图控制器),如何将数据发送到详细视图,以及如何取回用户输入或其他数据。该视频汇集了:(1) 如何在不编程的情况下制作 UI,(2) UINavigationController 如何帮助屏幕流动,以及 (3) 如何来回传递数据,两者都使用 协议并通过核心数据数据库。直接回答问题的部分从 12:00 开始。

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多