UITableView
並べ替え可能な行があり、標準UITableViewCell.text
プロパティを使用してテキストを表示しています。[編集] をタップして行を移動し、[完了] をタップしてから行をタップすると、組み込みUILabel
が完全に白 (テキストと背景) になり、不透明になり、セルの青い影がその背後に表示されなくなります。何を与える?私がしていないことで、私がしなければならないことはありますか?ハックな修正がありますが、本物のマッコイが欲しいです。
これを再現する方法は次のとおりです。
iPhone OS 2.2.1 SDK の標準の「Navigation-Based Application」テンプレートから始めます。
RootViewController.m を開く
コメント
viewDidLoad
を外し、[編集] ボタンを有効にします。- (void)viewDidLoad { [super viewDidLoad]; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. self.navigationItem.rightBarButtonItem = self.editButtonItem; }
テーブルにいくつかのセルがあることを指定します。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 4; }
で
tableView:cellForRowAtIndexPath:
、セルのテキスト プロパティを設定する行を追加して、組み込みの UILabel サブビューを使用します。// Set up the cell... cell.text = @"Test";
並べ替えを有効にするには、コメントを外し
tableView:moveRowAtIndexPath:toIndexPath:
ます。デフォルトの実装は空白ですが、テンプレートにはデータ モデルが含まれていないため、この場合は問題ありません。Simulator、OS 2.2.1、Build and Go 用にプロジェクトを構成します。アプリが表示されたら、[編集] をタップし、任意の行を新しい位置にスライドさせ、[完了] をタップしてから、各行を一度に 1 つずつタップします。通常、タップすると行が選択され、青に変わり、テキストが白に変わります。しかし、移動したばかりの行をタップすると、UILabel の背景色が白のままになります。その結果、端に青い帯が付いた紛らわしい白いオープン スペースができあがります。奇妙なことに、最初の偽のタップの後、問題を修正するために別のタップが表示されます。
これまでのところ、それを修正するハックを見つけましたが、満足していません。ビルトインがUILabel
不透明でなく、選択直後に背景色がないことを確認することで機能します。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// hacky bugfix: when a row is reordered and then selected, the UILabel displays all crappy
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (UIView *view in cell.contentView.subviews) {
if ([[view class] isSubclassOfClass:[UILabel class]]) {
((UILabel *) view).backgroundColor = nil;
view.opaque = NO;
}
}
// regular stuff: only flash the selection, don't leave it blue forever
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
これは機能しているように見えますが、それが永遠に良い考えであるとは思っていません。これを修正する正しい方法は何ですか?