1

自分のデザインのいくつかのカスタムUITableViewCellをサポートする編集可能なUITableViewを作成しました。ユーザーが新しいレコードを作成したり、既存のレコードを変更したりするときはいつでも、このUITableViewを使用します。グループ化されたスタイルのテーブルビューを使用して、テーブルビューをtableViewCellsのグループに分割しました。

ユーザーがレコードを編集しているときに、セクション1を表示したくありません。これを実現するために、numberOfRowsInSectionメソッドが呼び出されたときに0を返します。すべて問題なく動作しますが、セクション0とセクション2の間に「わずかな視覚的なギャップ」があり、可能であれば排除したいと思います。indexPathsを動的に処理するためにテーブルビューコントローラを再コーディングすることは避けたいです。私のindexPath(セクションと行)の多くはハードコーディングされています。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

printf("CustomEntryViewController, -tableView:numberOfRowsInSection:\n");

if (tableView == self.customEntryTableView) {

    if (section == 0) 

        return 1;

    else if (section == 1) {

        if ([self.entryMode isEqualToString:@"ADD"]) 
            return 2;
        else if ([self.entryMode isEqualToString:@"EDIT"])
            return 0;

    }
    else if (section == 2)

        return 1;

    else if (section == 3)

        return 1;

    else if (section == 4 && self.uisegQuantityAnswer.selectedSegmentIndex == 0) 

        return 1;

}

return 0;
}

前もって感謝します。

4

1 に答える 1

1

問題の回避策を見つけました。tableViewデリゲートから渡されるセクションを仮想化するために、ViewControllerに2つのヘルパーメソッドを作成しました。仮想セクションを使用すると、テーブルビューでセクションを無効にする場合は常に、作成したロジックがスキップされます。

- (NSIndexPath *)virtualIndexPath:(NSIndexPath *)indexPath {

    return [NSIndexPath indexPathForRow:indexPath.row inSection:[self virtualSection:indexPath.section]]; 

}


- (NSUInteger)virtualSection:(NSUInteger)section {

    NSUInteger virtualSection;

    if ([self.entryMode isEqualToString:@"ADD"])

        virtualSection = section;

    else if ([self.entryMode isEqualToString:@"EDIT"]) {

        if (section == 0) 
            virtualSection = section;

        else if (section > 0)
            virtualSection = section + 1;

    }

    return virtualSection;

}

次に、アプリケーションの残りの部分で上記のメソッドの1つを呼び出します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSUInteger virtualSection = [self virtualSection:section];

    if (tableView == self.customEntryTableView) {

        if (virtualSection == 0) {

// Additional code....

これに加えて、-tableView:numberOfSectionsInTableView:メソッドも変更して、ADDモードとEDITモードごとに正しいセクション数を返すようにしました。

これは単なる回避策であるため、この質問には未回答のマークを付けておきます。

于 2011-04-25T12:28:17.423 に答える