如何创建相当大的子视图

时间:2012-01-29 00:16:51

标签: iphone objective-c xcode uiview subview

我正在寻找一个像这样可拖动的大尺寸子视图:

如果有一个IBAction带你到下一个View(SecondViewController),那么它会有另一个IBAction,当你点击那个时,它会创建一个大约是当前屏幕大小一半的SubView在(SecondViewController)中显示将要创建的第三个视图控制器?另外,你如何使该子视图可拖动?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

很抱歉,为了清楚起见,你希望你的第二个视图控制器有一个按钮,当你点击时,你的第三个视图控制器会占据底部屏幕的一半?

如果是这种情况,那么您可以使用iOS5中的新视图控制器容器执行此操作。

好的,所以你有三个视图控制器。为此,我们可以说你的类叫做FirstViewController,SecondViewController和ThirdViewController。

我假设您已经拥有了一个带有按钮的FirstViewController实例,它将您带到SecondViewController的实例,然后问题是让SecondViewController将ThirdViewController的实例添加到下半部分按下按钮时的屏幕。

SecondViewController的.m文件需要执行以下操作:

#import "ThirdViewController.h"

@interface SecondViewController ()

@property (retain) ThirdViewController *thirdViewConroller;

- (void)buttonTap;

@end

@implementation SecondViewController

@synthesize thirdViewConroller = _thirdViewConroller;

- (void)dealloc {
    self.thirdViewConroller = nil;
    [super dealloc];
}

- (void)loadView {
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.titleLabel.text = @"Show third controller";
    [button addTarget:self action:@selector(buttonTap) forControlEvents:UIControlEventTouchUpInside];
    button.frame = // Some CGRect of where you want the button to be
    [self.view addSubview:button];
}

- (void)buttonTap {
    // When the button is tapped, create an instance of your ThirdViewController and add it
    self.thirdViewConroller = [[ThirdViewController alloc] initWithFrame:/* Some CGRect where you want the controller to be */ ];
    [self.thirdViewConroller willMoveToParentViewController:self];
    [self addChildViewController:self.thirdViewConroller];
    [self.thirdViewConroller didMoveToParentViewController:self];
}

@end

这应该会给你第二个控制器上的一个按钮,它会创建并添加第三个控制器。请确保我们拥有您之前拥有的所有标准方法,这应该是您所拥有的。

在ThirdViewController的界面中:

@interface ThirdViewController : UIViewController <NSObject>
    - (id)initWithFrame:(CGRect)frame;
@end

然后在你的ThirdViewController的实现中:

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithNibName:nil bundle:nil];
    if (self) {
        self.view.frame = frame;
        // Do your init stuff here
    }
    return self;
}

然后它应该处理添加视图等等。

确保您的thirdViewController类具有有效的initWithFrame:initialiser方法。

这应该可以解决问题,如果您需要任何进一步的帮助,请告诉我:)