Итак, мне дали задание в моем классе мобильных приложений: создайте приложение для цветной игры для iphone (описание того, как работает игра, находится вверху вставленного файла viewcontroller.h ниже.)
Я очень плохо знаком с Objective-C и какао, но сумел устранить неполадки и исправить многие вещи в этом приложении.У меня сейчас проблема в том, что я не знаю, как правильно инициализировать и отправить UITableViewCells в представление.Я запутался, потому что все учебники, которые я нашел в Интернете, используют методы источника данных для изменения различных атрибутов UITableView и ячеек.Я не уверен, как эти методы будут взаимодействовать с элементами управления, которые я уже разместил.Я в замешательстве, потому что я добавил их в файл раскадровки, а не определяя атрибуты табличного представления с помощью кода источника данных.
Моя непосредственная проблема заключается в том, что моя программа не будет отображать правильный текст для метки текста и метки detailtextlabel.
Я везде просматривал учебники по UITableView и UITableViewCell, но все они написаны много лет назад, и я не уверен, изменило ли появление раскадровки способ, которым я бы относился к этим элементам управления.
Весь код, который я написал, находится либо в файлах viewcontroller.m или viewcontroller.h.
Метод в файле ViewController.m, который должен вызывать ячейку и отображать текст и подробный текст:
-(IBAction)enterClicked
{
//On enter- send instance colors to the colorTable row[i], perform comparisons and append the resulting symbols to the instanceResults String. Send instanceResults string to the resultTable row[i]. When game counter reaches 6, gameOver. If on comparisons check, the instanceColors are the same as the gameColors, then the player wins.
[self checkForLoss];
if(!self.gameOver)
{
resultOfGuess = [self comparePlayerInputToGameColors:guessColors];
[listOfGuesses addObject:guessColors];
[listOfOutcomes addObject:resultOfGuess];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_numberOfTurnsPlayed inSection:0];
UITableViewCell *thisCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
thisCell.textLabel.text = [self.listOfGuesses lastObject];
thisCell.detailTextLabel.text = [self.listOfOutcomes lastObject];
[guessColors setString:@""];
if([self checkForWin:resultOfGuess])
[UpdateLabel setText:@"You have won!"];
else
[UpdateLabel setText:@""];
self.colorCounter = 0;
self.isStepOne = YES;
_numberOfTurnsPlayed++;
}
else
{
if([self checkForLoss])
[UpdateLabel setText:@"You have lost!"];
}
}
Методы источника данных UITableView, которые я вызвал внизу файла viewcontroller.m:
#pragma mark - UITableViewDataSource protocol
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if(section == 0)
return @"Guesses: Results:";
return 0;
}
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 6;
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
return cell;
}
Итак, мои вопросы: Могу ли я изменить свойства элемента управления с помощью методов источника данных,если я создал элементы управления через раскадровку?Как правильно отобразить текст в ячейках uitableview?
Редактировать / обновить: Спасибо, я воспользовался вашим советом jrturton, но теперь я обнаружил нечто странное, что может быть источником моих проблем.в моем файле viewController.h я изменил свой заголовок с
ViewController: UIViewController на ViewController: UITableViewController
Считая, что методы источника данных, которые я вызываю в файлах viewcontroller, должны иметь возможность вызыватьте же методы и свойства класса, которые я вызываю в заголовке. Кроме того, я вижу, что это делается в других файлах учебника UITableView.
Проблема в том, что когда я изменяю заголовок на read-- ViewController: UITableViewController -- и я пытаюсь скомпилировать, я получаю эту ошибку:
Завершение приложения из-за необработанного исключения 'NSInternalInconsistencyException', причина: '- [UITableViewController loadView] загрузил перо "2-view-3", но неполучить UITableView.Он прекрасно компилируется, если я использую только: UIViewController в заголовочном файле.
Любые идеи?
Дальнейшее обновление: я заметил в своей раскадровке, что единственный доступный объект ViewController - это UIViewControllerобъект, в то время как в других учебных файлах, которые я видел, этот объект ViewController является объектом UITableViewController.Я предполагаю, что это моя проблема, но я не могу переключить свой объект UIViewController на UITableViewController.Все, что я могу сделать, - это создать новый, что я не хочу, я думаю.