如何以编程方式访问Nib中的各种UIView?

时间:2011-11-18 22:12:55

标签: iphone ios xcode cocoa-touch uikit

首先,我是Objective-C / iOS开发的新手,事实上,这个问题是我的第一个测试项目。此外,我来自C#/ WinForms背景,所以我正在进入iOS开发,其中包含一些预先设想的用户界面设计和应用程序状态概念。请耐心帮我解决问题。

我刚刚创建了我的第一个iOS应用程序项目,它包含一个单一视图。我允许Xcode通过Single View项目向导为我创建所有文件。完成后,我在设计器中打开了我的新应用程序,单个UIView Nib文件,并将三个滑块放到视图上。

此应用程序的预期目的非常简单 - 每个滑块对应于与我视图的背景颜色相关联的R,G或B值。

我已经弄清楚如何设置视图的背景但我无法弄清楚如何访问每个滑块对象的值。是的,我可以为每个滑块连接并回复IBAction,但我的计划是每次滑块的值发生变化时,我希望IBAction调用一个重构方法来访问每个滑块的值所有三个滑块然后根据与每个滑块关联的值设置视图背景颜色。

如何访问滑块的值?具体来说,如何通过将它们拖放到Nib设计器窗口中来访问我创建的滑块的值?我看过代码解释了如何以编程方式将UISlider添加到UIView然后访问该值,但是如何访问添加到Nib的UISlider的值,我想,在编译时会自动“连线”吗?

希望这是因为?如果我错过了中间步骤或关键概念,请告诉我。

3 个答案:

答案 0 :(得分:2)

您创建UISlider ivars / properties并将它们设为IBOutlets:

@property (nonatomic, retain) IBOutlet UISlider* yourSlider;

您在.m文件中合成它并在界面构建器中连接IBOutlet。然后,yourSlider指针是对您连接的对象的引用。请注意,它只会加载UIViewController的视图,因此在调用viewDidLoad之前将为nil。您还必须将其设置为nil

self.yourSlider = nil;
在viewDidUnload方法中

(以便它被释放)。在Xcode 4中,您可以通过一个操作方便地执行上述所有步骤(请参阅What's new in XCode 4的“Interface Builder内置”)

答案 1 :(得分:1)

类似于CTRL +从UISlider拖动到.m文件以创建IBAction,您可以CTRL +将UISlider从.nib设计器拖动到关联的.h文件,并让它为您创建属性。然后,从.m文件中,您可以访问self.mySlider(或您为该属性命名的任何内容)。

this page上有一个视频,专门显示与UISlider的绑定。

答案 2 :(得分:0)

另一种方法是使用视图的tag属性。

@property(nonatomic) NSInteger tag

- (UIView *)viewWithTag:(NSInteger)tag

您可以在界面构建器中设置视图的标记属性,然后在控制器中引用该视图。

UIView *myViewFromTag = [self.view viewWithTag:theNumberYouSetInIB];

一般来说,坚持使用IBOutlets会更好。但是,在某些情况下,使用标签会更有意义。

祝你好运!