将Static-TableView-Cells添加到UIViewcontroller的最佳方法?

Seb*_*ldt 7 iphone cocoa-touch uitableview ios

我想在我的应用程序中添加一个tableview-look-a-like-login,但它似乎并不那么容易实现.我尝试使用多种方法来实现我的目标,但我不确定哪种解决方案是最好的.

例如,Dropbox和Facebook都有这样的登录页面.

以下是我的3种方法:

  1. 我在我的视图中添加了2个UITextfields(没有边框)并放置了一个.png后面,看起来像tableviewcell.(不是最好的方法,因为我想使用真实的tableviews)

  2. 我在ViewController中添加了一个Container View,里面放置了一个带有静态Table Views的tableview.这里的问题是,我不知道如何访问我的viewcontroller中的信息?

  3. 我在我的ViewController中添加了一个tableview,并使用了动态单元格.将委托和数据源的出口连接到我的viewcontroller,并使用委托和数据源方法初始化它们.这里的问题是,我不能在uiviewcontroller中使用静态表视图.

有没有更好的方法来解决这个问题?我真的想知道如何以更优雅的方式做到这一点.

编辑:

一个月前,ContainerViewController基本上解决了这个问题.将一个嵌入主控制器后,您可以通过该prepareForSegue功能访问它,并为该特定控制器定义基于协议的接口,以与嵌入式控制器进行交互.

Tom*_*ren 2

我有一个想法如何解决这个问题。我认为这是一种干净的方式。您不需要此控制器的故事板。

让你的控制器子类 UITableViewController 像这样:

@interface YourViewController : UITableViewController
Run Code Online (Sandbox Code Playgroud)

然后在 viewDidLoad 中创建单元格的实例:

- (void) viewDidLoad {
    usernameCell = [YourTextFieldCell new];
    passwordCell = [YourTextFieldCell new];
}
Run Code Online (Sandbox Code Playgroud)

当然是YourTextFieldCell你自己的 UITableViewCell 子类,它可能是这样的:

@implementation YourTextFieldCell {
    UITextField textField;
}
- (id) init {
    self = [super init];
    if (self) {
        // Adjust the text's frame field to your liking
        textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
        [self addSubview:textField];
    }
}
// A getter method to access the textfield from the outside
- (UITextField *) textField {
    return textField;
}

@end
Run Code Online (Sandbox Code Playgroud)

早在YourViewController

- (NSInteger) tableView:(UITableView *) tv numberOfRowsInSection:(NSInteger) section {
    return 2;
}
- (UITableViewCell *) tableView:(UITableView *) tv cellForRowAtIndexPath:(NSIndexPath *) indexPath {
    if (indexPath.row == 0) {
        return usernameCell;
    } else if (indexPath.row == 1) {
        return passwordCell;
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

你明白我的意思了吗?我认为你应该这样做!祝你好运!