Yanıtlar:
Hücrenin contentView öğesinin backgroundColor değerini renginize ayarlamanız gerekir. Aksesuarlar (açıklama okları vb.) Kullanıyorsanız, bunlar beyaz olarak görünür, bu nedenle bunların özel sürümlerini yuvarlamanız gerekebilir.
UITableViewCellAccessoryCheckmark
Örneğin, kendininkini nasıl yuvarlayacağınıza dair herhangi bir bağlantı var mı? Teşekkürler.
cell.textLabel.backgroundColor = [UIColor clearColor];
İşte bu sorunu çözmek için karşılaştığım en verimli yol, willDisplayCell delege yöntemini kullanın (cell.textLabel.text ve / veya cell.detailTextLabel.text kullanırken de metin etiketi arka planı için beyaz renkle ilgilenir. ):
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }
Bu delege yöntemi olarak adlandırıldığında, hücrenin rengi tablo görünümünden ziyade hücre üzerinden denetlenir, kullandığınız gibi:
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { ... }
Hücre delege yönteminin gövdesi içinde, hücrelerin renklerini değiştirmek için aşağıdaki kodu ekleyin veya yalnızca tablonun tüm hücrelerini aynı renkte yapmak için işlev çağrısını kullanın.
if (indexPath.row % 2)
{
[cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];
Bu çözüm benim durumumda iyi çalıştı ...
cell.backgroundColor = UIColor.clearColor
OS 3.0 sadece willDisplayCell yönteminde hücrenin arka plan rengini ayarladığından bu gerçekten basittir. CellForRowAtIndexPath içinde rengi ayarlamamalısınız.
Bu hem düz hem de gruplandırılmış stil için çalışır:
Kod:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor redColor];
}
Not: Burada willDisplayCell için belge özeti:
"Bir tablo görünümü, bir satır çizmek için hücreyi kullanmadan hemen önce bu iletiyi temsilcisine gönderir ve böylece temsilcinin, görüntülenmeden önce hücre nesnesini özelleştirmesine izin verir. Bu yöntem, temsilciye, daha önce ayarlanan durum tabanlı özellikleri geçersiz kılma şansı verir Temsilci geri döndükten sonra, tablo görünümü yalnızca alfa ve çerçeve özelliklerini ve ardından yalnızca satırları içeri veya dışarı kaydırırken animasyon yaparken ayarlar. "
Bu bilgiyi colionel'den bu yazıda buldum . Ona teşekkür et!
Şimdiye kadar bulduğum en iyi yaklaşım, hücrenin arka plan görünümünü ve hücre alt görünümlerinin net arka planını ayarlamaktır. Tabii ki, bu sadece endeksli tarzı olan masalarda, aksesuarlar olsun veya olmasın güzel görünüyor.
İşte hücrenin arka planının sarıya çevrildiği bir örnek:
UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews )
{
view.backgroundColor = [ UIColor clearColor ];
}
Sadece bunu UITableView delege sınıf dosyasına (.m) koyun:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
cell.backgroundColor = color;
}
Seba ile hemfikirim, rowForIndexPath delege yönteminde alternatif satır rengimi ayarlamaya çalıştım, ancak 3.2 ve 4.2 arasında tutarsız sonuçlar alıyordum. Aşağıdaki benim için harika çalıştı.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if ((indexPath.row % 2) == 1) {
cell.backgroundColor = UIColorFromRGB(0xEDEDED);
cell.textLabel.backgroundColor = UIColorFromRGB(0xEDEDED);
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
else
{
cell.backgroundColor = [UIColor whiteColor];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
}
Tüm farklı çözümleri denedikten sonra, aşağıdaki yöntem en şık olanıdır. Aşağıdaki temsilci yönteminde rengi değiştirin:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (...){
cell.backgroundColor = [UIColor blueColor];
} else {
cell.backgroundColor = [UIColor whiteColor];
}
}
vlado.grigorov'un bazı iyi tavsiyeleri vardır - en iyi yol bir backgroundView oluşturmak ve bunu bir renk vermek ve clearColor'a her şeyi ayarlamaktır. Ayrıca, bu şekilde rengi doğru bir şekilde temizlemenin tek yoludur (örneğini deneyin - ama 'yellowColor' yerine 'clearColor' ayarlayın), yapmaya çalıştığım şey bu.
Bir tablo görünümü hücresinin arka planını özelleştirmek sonunda olur ve "ya hep ya hiç" yaklaşımı olur. İçerik hücresinin arka planı için kullanılan rengi veya görüntüyü garip görünmeyecek şekilde değiştirmek çok zordur.
Bunun nedeni, hücrenin aslında görüşün genişliğini kaplamasıdır. Yuvarlatılmış köşeler çizim stilinin sadece bir parçasıdır ve içerik görünümü bu alandadır.
İçerik hücresinin rengini değiştirirseniz köşelerde görünen beyaz bitlerle sonuçlanırsınız. Tüm hücrenin rengini değiştirirseniz, görünümün genişliğini kapsayan bir renk bloğunuz olur.
Bir hücreyi kesinlikle özelleştirebilirsiniz, ancak ilk başta düşündüğünüz kadar kolay değildir.
N.Berendt'in cevabını genişletmek için - Hücre rengini, gerçek hücre veri nesnesindeki bir duruma göre ayarlamak istiyorsanız, tablo hücresi için bilgilerin geri kalanını yapılandırırken, genellikle cellForRowAtIndexPath yöntemi, bunu içerik görünümü arka plan renginden hücre arka plan rengini ayarlamak için willDisplayCell yöntemini geçersiz kılarak yapabilirsiniz - bu, açıklama düğmesi arka planlarının vb. diğer tüm hücre özelleştirmelerini yaptığınız yer.
Yani: Bu yöntemi tablo görünümü temsilcinize eklerseniz:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = cell.contentView.backgroundColor;
}
Sonra cellForRowAtIndexPath yönteminde şunları yapabilirsiniz:
if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
cell.contentView.backgroundColor = [UIColor blueColor];
}
Bu, willDisplayCell yönteminde veri nesnelerinizi tekrar almak zorunda kalmaz ve aynı zamanda tablo hücrenizi uyarlama / özelleştirme yaptığınız iki yere sahip olmanızı sağlar - tüm özelleştirme cellForRowAtIndexPath yöntemine girebilir.
Photoshop veya gimp ile arka plan olarak kullanmak için bir görüntü oluşturun ve resmini myimage olarak adlandırın. Ardından, bu yöntemi tableViewController sınıfınıza ekleyin:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
UIImage *cellImage = [UIImage imageNamed:@"myimage.png"];//myimage is a 20x50 px with gradient color created with gimp
UIImageView *cellView = [[UIImageView alloc] initWithImage:cellImage];
cellView.contentMode = UIContentViewModeScaleToFill;
cell.backgroundView = cellView;
//set the background label to clear
cell.titleLabel.backgroundColor= [UIColor clearColor];
}
Bu, UITableView özelliğini öznitelik denetçisinde özel olarak ayarladıysanız da çalışır.
Benim çözüm, cellForRowAtIndexPath olayına aşağıdaki kodu eklemektir:
UIView *solidColor = [cell viewWithTag:100];
if (!solidColor) {
solidColor = [[UIView alloc] initWithFrame:cell.bounds];
solidColor.tag = 100; //Big tag to access the view afterwards
[cell addSubview:solidColor];
[cell sendSubviewToBack:solidColor];
[solidColor release];
}
solidColor.backgroundColor = [UIColor colorWithRed:254.0/255.0
green:233.0/255.0
blue:233.0/255.0
alpha:1.0];
Her durumda, açıklama düğmeleriyle bile çalışır ve mantığınızın cellForRowAtIndexPath'te hücrelerin renk durumu üzerinde hareket etmesi için cellWillShow olayından daha iyi olduğunu düşünüyorum.
UITableViewCell alt sınıf ve bunu uygulama ekleyin:
-(void)layoutSubviews
{
[super layoutSubviews];
self.backgroundColor = [UIColor blueColor];
}
UIView *bg = [[UIView alloc] initWithFrame:cell.frame];
bg.backgroundColor = [UIColor colorWithRed:175.0/255.0 green:220.0/255.0 blue:186.0/255.0 alpha:1];
cell.backgroundView = bg;
[bg release];
Bu, en son Xcode'da çalışacaktır.
-(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
cell.backgroundColor = [UIColor grayColor];
}
Bunu dene:
- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setBackgroundColor:[UIColor clearColor]];
tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
}