viewcontroller中的多个UIViews?

时间:2010-08-14 03:21:22

标签: iphone uiview uiviewcontroller

我有一个uiviewcontroller。 UIview顶部有2个按钮。

如果用户点击按钮,我想加载2个不同的UIViews(小视图;宽度= 320,高度= 200)。 我在每个小视图和一些控件中都有uitableview。这就是为什么我想用自己的uiviewcontrollers处理每个uiview。

我想我应该用CGRect创建Uiview并在按钮点击时调用小uiviewcontroller。但我不知道怎么做。感谢

如何使用自己的uiviewcontroller处理小型uiviews,我可以用IB设计小型uiviews吗?

2 个答案:

答案 0 :(得分:1)

这绝对是可能的,Apple不推荐它,但对于像你这样的特殊情况,我同意,使用它。

我的方法:

使2个子视图表视图控制器没有xib文件,使用-awakeFromNib进行设置,而不是viewDidLoad,不会在它们上调用viewDidLoad。 (等到设置控制器以加载数据之前的下一步,在该步骤工作之前,您将无法进行调试)

现在使用xib(不是表视图)创建第三个控制器并打开xib。从库中将2个UITableViewControllers添加到窗口中,其中包含File的Owner,First Responder等,然后在检查器中转到最后一个选项卡 - 将其类更改为您制作的2个自定义表视图控制器。

接下来将2个表视图拖到主视图中,并在连接选项卡中,将委托和数据源绑定到一个控制器以获取一个表视图,然后重复另一个。此外,选择控制器,并将其视图插座连接到表视图。

接下来你应该使用xib进入主视图的控制器,然后像这样为表控制器创建出口:

 @interface class : UIViewController {
      UITableViewController *controller1;
      UITableViewController *controller2;
 }

 @property(nonatomic, retain) IBOutlet UITableViewController *controller1;
 @property(nonatomic, retain) IBOutlet UITableViewController *controller2;

使用该属性以保留它们非常重要,并且在viewDidUnload部分中,将它们取出以进行内存管理:self.controller1 = nil;

现在构建并继续,如果你设法完成所有这些,你应该有控制器的工作表视图,随时可以设置。

答案 1 :(得分:0)

使用Alex的解决方案来设置对表视图的引用(如您所述的小表)。将您的按钮添加到封闭的UIView中,并将代码放在按钮操作方法中,以根据按钮选择交换/交换正确的视图。

- (IBAction) buttonSwapViewPressed:(id) sender {
    if (swapInView1) {
      controller1.view.hidden = NO;
      controller2.view.hidden = YES;
    } else {
      controller1.view.hidden = YES;
      controller2.view.hidden = NO;
    }

您的视图层次结构类似于:

UIView   - Enclosing View
   UIButton - Swap Button
   UITableView - Table View 1
   UITableView - Table View 2