Posts Tagged clearColor
UITableViewCell.textLabel Farklı Arkaplan Rengi
Posted by Deniz Adalar in iPhone on December 15th, 2009
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:

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:

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