我正在寻找一个像这样可拖动的大尺寸子视图:
如果有一个IBAction带你到下一个View(SecondViewController),那么它会有另一个IBAction,当你点击那个时,它会创建一个大约是当前屏幕大小一半的SubView在(SecondViewController)中显示将要创建的第三个视图控制器?另外,你如何使该子视图可拖动?谢谢你的帮助。
答案 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方法。
这应该可以解决问题,如果您需要任何进一步的帮助,请告诉我:)