У меня была похожая проблема в том, что я создаю подкласс UITableViewCell, но не использую раскадровку.Вот мое решение использования различных классов ячеек, в зависимости от того, приобрел ли пользователь функцию разблокировки приложения.Надеюсь, это кому-нибудь поможет.
В двух словах, у меня была ячейка с несколькими объектами, включая объект UITextView.Я хотел заблокировать функцию копирования и вставки объекта UITextView в облегченной версии, но затем выпустить эту функцию, как только пользователь приобрел ее в приложении.
У меня было два класса UITableViewCell, один с UITextView какэто и другое с UITextView, подклассами которого canBecomeFirstresponder, возвращающий NO.Таким образом, пользователь все еще может прокручивать вверх и вниз данные UITextview, но не копировать и вставлять данные.
Вот код, и все, что мне нужно было сделать, это переименовать идентификаторы повторного использования.
ПОЧЕМУ?Потому что [self.tableview reloadData] не будет перестраивать ячейки с новым классом, поскольку ячейка еще существует.Новые ячейки вне экрана получат новый класс, а существующие - нет.Это решение восстанавливает все ячейки один раз после покупки, разблокируя добавленную функцию.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (your test if in-app was purchased is yes)
{
static NSString *MyIdentifier = @"MyCell";
FrontCell *cell = (FrontCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[FrontCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.shouldIndentWhileEditing = NO;
}
//....///
cell.trackDetails.text = [yourObject objectAtIndex:indexPath.row];
cell.trackDetails.delegate = self;
cell.trackDetails.tag = indexPath.row;
return cell;
}
else // inapp not purchased
{
static NSString *MyLockedIdentifier = @"MyLockedCell";
FrontCellLocked *cell = (FrontCellLocked *)[tableView dequeueReusableCellWithIdentifier:MyLockedIdentifier];
if (cell == nil)
{
cell = [[FrontCellLocked alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyLockedIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.shouldIndentWhileEditing = NO;
}
//....///
cell.trackDetails.text = [yourObject objectAtIndex:indexPath.row];
cell.trackDetails.delegate = self;
cell.trackDetails.tag = indexPath.row;
return cell; }
}