子类化 UIView/UIViewController
Posted
技术标签:
【中文标题】子类化 UIView/UIViewController【英文标题】:Subclassing UIView/UIViewController 【发布时间】:2013-01-24 03:45:29 【问题描述】:我的应用中需要很多自定义按钮。目前我正在使用情节提要在我需要的每个控制器上定义这些按钮。但是,我觉得因为我在整个应用程序中都需要它们,所以我最好放置一个不同的视图控制器/视图,它是 UIView
或 UIViewController
的子类,所以如果我需要进行任何更改,我只需要做它们一次,而不是在不同的视图控制器中。最好的方法是什么?你能告诉我如何以编程方式创建按钮吗?这就是我目前正在做的事情,我得到了一个完全空白的屏幕。
-(void)viewDidAppear:(BOOL)animated
UIButton *testButton = [UIButton buttonWithType:UIButtonTypeCustom];
[testButton setFrame:CGRectMake(0, 390, 100, 40)];
[testButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
[setImage:[UIImage imageNamed:@"test_button"] forState:UIControlStateNormal];
[setImage:[UIImage imageNamed:@"test_button"] forState:UIControlStateHighlighted];
[setEnabled:YES];
[self.view addSubview:testButton];
【问题讨论】:
您的 setImage 和 setEnabled 线是用于按钮还是视图控制器?另外,您是否遗漏了 [super viewDidAppear:animated];故意的? 该代码甚至无法编译。您需要在 setImage 和 setEnabled 前面有 testButton,然后它应该可以工作(假设您实际创建了这些图像 - 如果没有,按钮将不可见)。 Np,超视图 DidAppear:animated 在那里,我只是忘记粘贴了。 setImage 和 setEnabled 用于按钮。前面setImage和setEnabled中的ahve testButton是什么意思?当您说图像创建时,不确定您指的是什么,我将图像作为支持文件。 【参考方案1】:您的按钮有可能远离可见的矩形。对于以编程方式添加按钮,你做的大多是正确的。此外,图像应具有文件扩展名。由于您要添加自定义按钮,因此如果没有图像,那么您将看不到任何按钮。尝试为您的按钮添加标题,即使没有添加图像也会显示出来。
试试下面的代码。
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated]; //you must have a good reason to not add this line.
UIButton *testButton=[UIButton buttonWithType:UIButtonTypeCustom];
[testButton setFrame:CGRectMake(0, 20, 100, 40)];
[testButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
[testButton setImage:[UIImage imageNamed:@"test_button.png"] forState:UIControlStateNormal];
[testButton setImage:[UIImage imageNamed:@"test_button.png"] forState:UIControlStateHighlighted];
[testButton setEnabled:YES];
[self.view addSubview:testButton];
【讨论】:
谢谢,成功了。既然我有了这个,我应该在母控制器文件中做什么,以便以某种方式继承/展示这种行为,因为我希望这个按钮跨多个控制器。 我猜你想拥有同一个 viewController 的多个实例或从这个控制器继承的 viewControllers 的实例。在任何一种情况下,在每个派生/子/子类的 viewDidAppear 中(如果您正在实现它),只需调用 [super viewDidAppear:animated];该类的 testButton 将被添加。 嗯,但是我如何在这个控制器和其他控制器之间建立关系。就像我写 superviewDidappear 时它怎么知道我指的是这个特定的控制器? 所以,基本上我现在拥有的是一个在屏幕底部带有三个按钮的视图控制器。我需要这些按钮跨越我的应用程序的多个屏幕。那么我应该在我已经存在的其他控制器(如 mapview 控制器、表视图控制器等)中做什么,以便他们可以使用按钮继承此视图控制器并因此显示按钮? 这是一个可能对techotopia.com/index.php/Objective-C_Inheritance有帮助的继承示例以上是关于子类化 UIView/UIViewController的主要内容,如果未能解决你的问题,请参考以下文章