我在 Linux 上使用 iPhone 工具链,所以我没有 Interface Builder。那么如何在我的 ViewController 子类中布局我的视图呢?例如,我想要一个 UITextView 在屏幕中间?我应该在loadView
or中执行此操作吗viewDidLoad
?我是否还必须将 ViewController 子类的视图设置为自身?
问问题
4129 次
3 回答
2
使用代码布局所有视图并非易事。下面是一些代码:
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake (100, 100, 100, 100)];
[self.view addSubview:textView];
框架是位置(第一个和第二个参数是 x 和 y 坐标)和大小(第三个和第四个参数是文本视图的宽度和高度)。
使用这种方式,您可以将任何视图添加到您的类中。有些视图是内置的,你不必自己绘制,有些则不是,你需要继承 UIView 并覆盖 drawRect。
当您的主视图控制器完成加载时,您应该在 viewDidLoad 中执行此操作
于 2010-09-25T13:48:28.513 回答
1
于 2012-02-25T06:09:36.303 回答
0
我通常在 loadView 方法中构建整个视图层次结构并在 viewDidLoad 中执行其他设置,例如设置子视图内容以反映与视图控制器关联的数据。重要的是在 loadView 方法中设置视图控制器视图出口。
@synthesize label; // @property(nonatomic,retain) UILabel *label declared in the interface.
-(void)loadView {
// Origin's y is 20 to take the status bar into account, height is 460 for the very same reason.
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0,20,320,460)];
[aView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
[aView setAutoresizeSubviews:YES];
// The 150x50 label will appear in the middle of the view.
UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake((320-150)/2,(460-50)/250,150,50)];
// Label will maintain the distance from the bottom and right margin upon rotation.
[aLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin];
// Add the label to the view hiearchy.
[self setLabel:aLabel];
[aView addSubview:aLabel];
// Set aView outlet to be the outlet for this view controller. This is critical.
[self setView:aView];
// Cleanup.
[aLabel release];
[aView release];
}
-(void)viewDidLoad {
// Additional and conditional setup.
// labelText is an istance variable that hold the current text for the label. This way, if you
// change the label text at runtime, you will be able to restore its value if the view has been
// unloaded because of a memory warning.
NSString *text = [self labelText];
[label setText:text];
}
-(void)viewDidUnload {
// The superclass implementation will release the view outlet.
[super viewDidUnload];
// Set the label to nil.
[self setLabel:nil];
}
最大的困难可能是理解 IB 设置如何映射到 UIView 变量和方法,例如自动调整掩码。Apple 的 UIView 和 UIViewController 类引用充满了有用的信息。
于 2010-09-25T15:23:24.807 回答