2013-11-21 4 views
5

Я пишу абстрактный класс UITableViewController, и я хотел бы написать что-то в viewDidLoad какОпределите, имеет ли UITableView статические ячейки или динамические прототипы программно?

if (self.tableView.contentType == UITableViewContentTypeStaticCells) { 
    // Do something when table view has static cells 
} else { 
    // Do something when table view has dynamic prototypes 
} 

Но, очевидно, нет contentType на UITableView. Есть ли способ программно определить, является ли содержимое раскадровки tableView статическим или динамическим?

+1

Возможно, вы можете объяснить * почему * статические/динамические ячейки следует обрабатывать по-разному. Чего вы пытаетесь достичь? –

+0

Это разумный вопрос, однако я не думаю, что он имеет отношение к тому, что я прошу. Я хотел бы знать, можно ли различать два вида табличных представлений таблицы программно. Если это не так, это правильный ответ. :) – dmur

+1

Это интересно знать, например. локализации. Вы можете автоматически локализовать статические ячейки, но не динамические. – osxdirk

ответ

0

Нет никакой возможности для того, чтобы различать эти два, но если вы более конкретно о том, чего вы пытаетесь достичь, мы можем предложить альтернативные способы достижения вашей цели.

+1

Спасибо, это все, что я искал. Я не прошу альтернативных путей достижения моей конкретной цели, у меня уже есть несколько соображений. – dmur

1

Только для любопытных: [tableViewController valueForKey: @"staticDataSource"] доставит вас туда, где tableViewController - это UITableViewController.

НО (!) Это может не пройти AppStore и может прерываться без предупреждения, поскольку он не опубликован API.

Update: Кажется, что проверка, если проверка, если

self == self.tableView.dataSource 

в то время как само это UITableViewController также дает вам повторно запрошенный результат.

0

мое решение предполагает, что абстрактный класс UITableViewController должен выставить свойство BOOL

@property (assign, nonatomic) BOOL staticCells; 

это свойство valorised конкретными классами, и реализация методов DataSource проверяет состояние существования свойства, как и в этом случае:

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.staticCells) { 
     ... 
    } 
    else{ 
     UITableViewCell* cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 
     [cell layoutIfNeeded]; 
     return cell; 
    } 
} 

Я предполагаю, что вы искали свойство системной структуры (или метод делегирования), чтобы проверить статическое поведение, но, возможно, это решение может быть полезно для кого-то

Смежные вопросы