使用UISegmentedControl在两个视图之间切换

时间:2012-01-04 06:49:54

标签: iphone uiviewcontroller

我创建了UIViewController的子类。在其中我有两个属性:

@property (nonatomic, retain) IBOutlet UIView *presetsView;
@property (nonatomic, retain) IBOutlet UIView *customView;

我在我的.xib中添加了一个新的UIView,并在其中添加了一些UI元素。我想隐藏一个视图,并根据按下UISegmentedControl时显示另一个视图。

我的问题是在Interface Builder中,我的原始视图由IB提供给我,它已经连接到文件所有者的插座。因为我有自己的两个视图,预设和自定义,如何在IB中建立插座连接?

我尝试删除IB提供的原始视图,并将两个新的UIView拖到画布上。然后我将一个插座连接到每个插座。当我推动我的新viewController时,我得到一个错误,即我的viewController没有视图。然后,当我将文件所有者连接到显示我想要首先显示的视图的“视图”插座时,应用程序运行。我不确定这是不是正确的方法,为什么这是正确的方法。 ViewController是否总是需要.view属性作为它的出口?这就是我需要这样做的原因吗?感谢。

3 个答案:

答案 0 :(得分:1)

为UISegmentedcontrol和下面的实现方法编写动作方法

- (IBAction)selectMessageType {

noResultsPriview.hidden = YES;
//[activityIndicator startAnimating];

switch (msgOptionControl.selectedSegmentIndex) {

    case 0:

// view1的代码                 打破;

    case 1:

// view2 break的代码;

    case 2:

// view3的代码             打破;

    case 3;
        //code for view4
        break;


    default:
        break;

}

}

答案 1 :(得分:0)

UIViewController必须具有有效的UIView,因此在您的情况下,它可以是在创建XIB期间创建的original UIView。您的两个UIView属性是正确的。您所要做的就是在IB中设置presetsVieworiginal UIView之间的连接,以便稍后切换回它,然后您需要将customView连接到其他人的UIView。

因此,在您完成原始UIView之后将有两个连接,一个作为UIViewController(所有者)的视图,另一个作为presentsView

这些连接只是指针,因此您可以使用它们来操作UIViewController中的对象。

答案 2 :(得分:0)

是的,每个UIViewController都有一个根视图。它必须能够在调用其-loadView方法时通过从nib文件加载该视图(并将其view属性设置为结果)或通过编程方式创建它来构造该视图。

在您的情况下,单独保留view属性视图,不要尝试交换它。此根视图已经添加到窗口中,并且将控制器的引用更改为指向某个其他对象只会导致混淆和未定义的行为。而是将您的两个视图添加为控制器根视图的子视图,然后根据需要隐藏或显示。