哪种类型的应用程序将允许我创建具有导航支持的用户定义表视图

时间:2010-11-09 19:40:24

标签: iphone uitableview

我想显示表格视图和上面我有一些按钮要显示... 哪种类型的应用程序更好地实现这一点,它必须支持导航......

我尝试过基于导航的应用程序,但它不允许在根视图控制器中移动表视图...

1 个答案:

答案 0 :(得分:1)

选择用于生成初始应用程序的模板时,纯粹使用“应用程序类型”。生成应用程序后,您可以随意使用结构执行任何操作。

由于您说您需要导航(推送,弹出视图控制器,导航栏中有后退按钮),您应该从基于导航的应用程序模板开始。这将生成一个应用程序,其中root-view-controller基于UITableViewController。

现在,对于UITableView上方的按钮。这里有几个选项:

1)将按钮放在导航栏中。在导航栏的右侧添加一个按钮很容易:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle: @"My Button" style: UIBarButtonItemStyleBordered target: self action: @selector( onMyButton: )] autorelease];
}

添加多个按钮稍微困难但可以完成。

2)将按钮放在UITableView标题中。在root-view-controller的nib中,创建一个新视图(大小约为320x100)并添加按钮。将它附加到RootViewController中的UIView * IBOutlet,称为“_buttonContainer”,声明如下:

@interface RootViewController : UITableViewController 
{
    IBOutlet UIView*    _buttonContainer;
}

然后,在viewDidLoad中,使buttonContainer查看表格的标题:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.tableHeaderView = _buttonContainer;
}

这会将您的按钮放在tableView行的上方,但滚动表视图时按钮会滚动。别忘了连接你的按钮。

3)这是我认为你试图实现的选项 - 即将整个tableview向下移动并在其上方放置按钮。要做到这一点,不要使用UITableViewController作为rootViewController的基础。 UITableView是控制器的视图,它用于填充屏幕/窗口(在任何其他容器视图控制器中......)。相反,向项目添加一个新的基于UIViewController的类(确保选择“With XIB for user interface”,并取消选择“UITableViewController子类”)。在界面构建器中,将按钮拖到视图上,并将新的UITableView拖到视图上 - 并根据需要定位所有内容。连接tableview数据源并委托给视图控制器对象(即“文件所有者”对象)。

现在,在类定义中,您需要声明新的ViewController是tableview委托和数据源:

@interface MyNewRootViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

}

@end

并且,您需要添加最小的数据源方法集以支持tableview:

@implementation MyNewRootViewController

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return 0;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...

    return cell;
}

连接你的按钮,这就是它......你可以更新MainWindow.xib以使用新的rootviewcontroller而不是旧的。>