2

我实际上正在制作一个应用程序,其中有一个表格视图(列出所有课程)单击其中一个将显示该课程的详细信息。(细节视图)现在我想做的是,那个细节视图的编辑模式..我想让它感觉像 iphone 的原生应用程序:P

当我查看联系人的应用程序时,当我在联系人中单击“编辑”时,它似乎并没有改变整个视图控制器,而只是隐藏/显示旧/新字段和按钮..

如果它不是一个新的视图控制器(用于编辑),那么它是如何工作的?如果它是一个新的视图控制器,那么我想,它非常简单,将视图控制器推入导航堆栈..

4

2 回答 2

1

在视图控制器的“-(void)setEditing:(BOOL)editing animated:(BOOL)animated”方法中,覆盖当前行为:

 - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [self.tableView beginUpdates]; // Tell the table to begin updates to ensure that the following reloads and animations all happen at once

    [super setEditing:editing animated:animated];

    // set the table editing if you are not using UITableViewController

    // reload any rows that may need updating for the new state

    if (editing) {
        // tell the table view to insert the editing rows
    } else {
        // tell the table view to remove the editing rows
    }

    [self.tableView endUpdates]; // commit the updates.
}

所以现在,当视图控制器(和表视图)进入编辑模式时,视图控制器告诉表在编辑点插入行。表格本身也进入编辑模式。

随着视图控制器退出编辑(以及带有它的表格视图),正在编辑特定的行被删除。

请注意,如果您不使用 UITableViewController 子类,而只是 UIViewController 本身的子类,则需要告诉表格视图同时进入编辑状态:

[tableView setEditing:editing animated:animated];

如果您需要重新加载或插入行等,委托和数据源方法需要检查表是否处于编辑模式,并返回编辑或非编辑模式所需的行。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView.editing) {
        return /*editing count*/;
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView.editing) {
        // return cells for the editing state.
    }

    // return cells based on the standard state.
}
于 2012-07-24T10:15:40.487 回答
0

是的,您在 iPhone 中编写本机联系人的应用程序不会更改整个视图控制器,而只是隐藏/显示旧/新字段和按钮..

为此,首先您必须采用 UITableView 然后您可以通过采用不同的部分然后在该部分中的行来添加您的视图,或者使用 UITableView 的标题视图在联系人的应用程序中显示一些视图,例如联系人的应用程序联系人的 ImageView 和联系人姓名和公司字段显示在 UITableView 的标题视图中。

您还可以使用 UITableView 的页脚视图在表格视图的底部添加按钮或某些视图。

像这样,您可以显示用户选择的课程的详细视图。

对于编辑模式,当用户点击编辑按钮时,您需要重新加载表格视图并在表格视图的委托方法中为表格视图提供适当的视图,为此您需要跟踪模式,即课程详细视图模式或课程编辑模式。

或者

您可以将两个单独的表一起用于两种不同的模式。

当用户点击特定课程加载下一个显示课程详细信息的视图时,

当用户点击编辑按钮时,删除课程详细信息表格视图,例如 [tableview removeFromSuperView];

并添加具有不同视图的课程编辑表,

例如 [self.view addSubview:courseEditTable];

于 2012-07-25T11:12:44.153 回答