Где вызывать подготовку к переходу в представлении таблицы

Эй, я работаю над приложением, которое публикует 50 мест в динамическом tableView, и когда вы нажимаете на местоположение, оно переходит к новому контроллеру tableView и публикует 50 фотографий из этого места. Я создал tableViewController, а затем создал новый файл, содержащий все файлы, которые требуются tableView IE Cellforrowatindexpath. У меня есть переход от основного tableViewcontroller, но вся информация хранится в новом файле, который содержит методы, используемые tableViewController. Нужно ли писать PrepareForSegue в tableViewController или в файле, в котором есть методы, создающие таблицу? также, если я напишу это в tableViewCOntroller, как мне получить доступ к имени ячейки для одной из ячеек, которые создаются динамически? Спасибо.

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"Photos for location"]){
//I dont know what to use for the name
        [segue.destinationViewController setPhotoInPlace: WHAT DO I CALL THIS!?
    }
}

Имена вызовов берутся из другого файла, который использует общедоступный API для создания массива словарей, содержащих такую ​​информацию, как имя и местоположение. Файл называется flickrFetcher. Вот код, который динамически создает ячейки. self.brain — это экземпляр flickerFetcher, а topPlaces — это метод, вызываемый из flickrFetcher для получения NSArray NSdictionaries.

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{
// Create an instance of the cell
UITableViewCell *cell;
cell = [self.tableView dequeueReusableCellWithIdentifier:@"Photo Description"];

if(!cell)
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Photo Description"];
// set properties on the cell to prepare if for displaying   
//top places returns an array of NSDictionairy objects, must get object at index and then object for key

// the cellTitle has country then province, country goes in main title and province will go as subtitle.
NSString * cellTitle = [[[[self.brain class] topPlaces] objectAtIndex:self.location] objectForKey:@"_content"]; 

NSRange cellRange = [cellTitle rangeOfString:@","];

NSString * cellMainTitle = [cellTitle substringToIndex:cellRange.location];

cell.textLabel.text = cellMainTitle;

NSString* cellSubtitle = [cellTitle substringFromIndex:cellRange.location +2];

cell.detailTextLabel.text =  cellSubtitle;
//location is an int property that allows a new selection when using objectAtIndex
self.location++;
return cell;
}

person Terrel Gibson    schedule 02.08.2012    source источник


Ответы (1)


prepareForSegue: — это метод UIViewController, поэтому он должен быть в вашем контроллере представления. Параметр sender должен быть вашей ячейкой, вызвавшей переход. Вы можете использовать метод представления таблицы indexPathForCell:, чтобы получить связанный путь индекса, и этого должно быть достаточно, чтобы найти те же данные, которые вы поместили в ячейку при реализации cellForRowAtIndexPath:.

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

person Phillip Mills    schedule 02.08.2012
comment
под новым файлом я подразумеваю, что сделал его подклассом - person Terrel Gibson; 03.08.2012
comment
Хорошо, если это подкласс, это означает, что он также является UIViewController, поэтому, помещаете ли вы метод в родительский или дочерний класс, не должно иметь функционального значения. Ребенок, вероятно, дает лучший доступ к информации, которую вы хотите передать новому контроллеру... Я предполагаю. - person Phillip Mills; 03.08.2012
comment
когда я помещаю prepareforsegue в родителя, а затем пишу NSIndexPath *indexPath = [self.tableView indexPathForCell: отправитель]; Я получаю сообщение об ошибке, сообщающее, что tableview не объявлен. Но когда это у ребенка, эта ошибка очищается. Также как мне получить имя вызова, если индексный путь возвращает только строку и раздел? - person Terrel Gibson; 03.08.2012
comment
и я думаю, что это UITableViewController, а не UIViewController - person Terrel Gibson; 03.08.2012
comment
(UITableViewController также является UIViewController.) Предположительно, вы использовали строку и раздел для помещения информации в ячейку; Я предполагаю, что это то, что вам нужно передать новому контроллеру. Если нет, может быть, вы можете объяснить, откуда взялось название ячейки. - person Phillip Mills; 03.08.2012
comment
этого не знал. Я добавил код создания ячейки, надеюсь, это поможет - person Terrel Gibson; 03.08.2012
comment
и почему self.tableView объявлен только в файле подкласса? - person Terrel Gibson; 03.08.2012
comment
Я подозреваю, что вам было бы лучше, если бы вы настроили topPlaces, чтобы вы могли индексировать его, используя строку пути индекса. Я бы беспокоился, что то, что у вас есть, зависнет и / или даст плохие результаты, если вы много прокручиваете. (Что касается self.tableView, то он должен быть доступен в UITableViewController или в одном из его подклассов.) - person Phillip Mills; 03.08.2012