Posts Tagged cell

UITableViewCell.textLabel Farklı Arkaplan Rengi

UITableViewCell içerisinde önceden tanımlı olarak gelen textLabel alanının arkaplan rengi, o hücre yaratılırken değiştirilemiyor. Bu sorun farklı renkte ya da bir renk geçişi içeren arkaplana sahip hücre oluşturmak istersek ortaya çıkıyor. Örnek olarak aşağıdaki kod beklediğimiz etkiyi vermeyecektir:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

[cell.textLabel setBackgroundColor:[UIColor redColor]];
[cell.textLabel setText:[NSString stringWithFormat:@"Cell%d", indexPath.row+1]];

return [cell autorelease];
}

Bu kod satırının sonucunda textLabel’in arkaplanının kırmızı olmasını bekleriz, ancak çalıştırdığımızca arkaplan rengi değişmemiş görünür. Şu şekilde:

Screen shot 2009-11-18 at 11.47.31 AM

Bunun sebebi aslında iPhone SDK’sının otomatik olarak -hücrelerin ekranda kaydırılırken işlemciyi yormaması için- hücrelerin arkaplanlarını opak yapması ve standart bir renk ile göstermesidir. Bu durumun istisnası ise hücrenin seçilmesi durumudur. Dolayısıyla normal durumda textLabel opak olarak gösterilecek, ancak seçili (highlighted) duruma geçtiğinde arkaplanı transparan yapılacak ve arkasına belirttiğimiz backgroundView getirilecek. Normal durumlarda hangi renkte kalması gerektiğini söyleyebileceğimiz bir değişken olmadığı için (3.1.2 SDK’sinde yok en azından) textLabel normal durumda arkaplan rengini bulunduğu tablonun arkaplanı olarak ayarlar.

Eğer biz normal durumda farklı bir renkte görünmesini istiyorsak, bunu hücre yaratılırken (ya da initialize edilirken) değil, hücre ekranda gösterilecekken söylemeliyiz. Bahsettiğimiz UITableView’in delege metodu ‘tableView:willDisplayCell:forRowAtIndexPath:’dir. Bu metod hücre gösterilmeden hemen önce çağırıldığı için textLabel üzerinde istediğimiz değişiklikleri artık yapabiliriz.

Örnek kod olarak yukarıda yazdığımız satırı bahsedilen delege metodu içerisine yazarsak:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.textLabel.backgroundColor = [UIColor redColor];
}

Şu şekilde (ve istediğimiz gibi) bir görüntü elde ederiz:

Screen shot 2009-11-18 at 12.00.25 PM

Son olarak belirtmek istediğim nokta; bu bahsettiğim işlemler detailLabel için de aynen kullanılabilir.

, , , ,

1 Comment