[tableView reloadData];
を呼び出さずにテーブルビューのセクションヘッダー/フッターを再読み込みする方法はありますか?
実際、テーブルビューのセクションのセクションフッターにセルの数を表示したいと思います。テーブルビューは編集可能で、次を使用して行を削除または挿入します
– insertRowsAtIndexPaths:withRowAnimation:
– deleteRowsAtIndexPaths:withRowAnimation:
これらのメソッドはセクションフッターを更新しないようです。奇妙なことに、これらのメソッドを呼び出すと、テーブルビューのデータソースメソッド
- (NSString *)tableView:(UITableView *)table titleForFooterInSection:(NSInteger)section
(2回!)と呼ばれますが、テーブルビューを新しい値で更新しません!!
誰もがこの問題を修正する方法を知っていますか?
私はそれを間接的に行うことができました。UILabelを作成し、セクションヘッダー/フッターとして設定しました。
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
// update sectionFooterView.text
return sectionFooterView;
}
- (void)viewDidLoad {
// create sectionFooterView in Interface Builder, change the frame here
// use Font-size:15 , BG-Color: clearColor , text-Color: RGB=(97,105,118)
// and Text-alignment:Center to look like table view's original footer
sectionFooterView.frame = CGRectMake(0, 10, 320, 12);
}
カスタムフッタービューを設定せずにこれを行う方法を誰かが知っていますか?
基本的なテキストヘッダーまたはフッターしかない場合は、直接アクセスできます。
[tableView footerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForFooterInSection:indexPath.section];
同様にヘッダーについて:
[tableView headerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForHeaderInSection:indexPath.section];
これはうまくいくはずです:
UIView.setAnimationsEnabled(false)
tableView.beginUpdates()
if let containerView = tableView.footerViewForSection(0) {
containerView.textLabel!.text = "New footer text!"
containerView.sizeToFit()
}
tableView.endUpdates()
UIView.setAnimationsEnabled(true)
これは、Swift 3.0で行う方法です。
tableView.beginUpdates()
tableView.headerView(forSection: indexPath.section)?.textLabel?.text = "Some text"
tableView.endUpdates()
これを行う別の方法を次に示します。
UITableViewHeaderFooterView *headerView=[self.tableView headerViewForSection:1];
CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionFade;
animation.duration = 0.35;
[headerView.textLabel.layer addAnimation:animation forKey:@"kCATransitionFade"];
headerView.textLabel.text=[self tableView:self.tableView titleForHeaderInSection:1];
[headerView.textLabel sizeToFit];
UITableView、より具体的には-reloadSections:withRowAnimation:
のドキュメントを確認してください
このようにすることもできます
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
switch section {
case 0:
return "Some string"
default:
return ""
}
}
テキストが1行の入力から複数の行の入力に変わり、1行に戻ると、フッターテキストが正しく更新されないことがわかりました。ラベルの幅と高さをリセットすると、この問題が解決します。
UIView.setAnimationsEnabled(false)
textLabel.frame = CGRect(x: textLabel.frame.minX,
y: textLabel.frame.minY,
width: 0,
height: 0)
tableView.beginUpdates()
textLabel.text = "Your text"
textLabel.sizeToFit()
tableView.endUpdates()
UIView.setAnimationsEnabled(true)