2014-12-08 2 views
0

У меня есть обычай Tableview клетка с MAPview справа:Выбор UITableVewCell с MKMapView

TableView

взаимодействие пользователя для карты отключена. Когда я нажимаю на карту, ячейка выделяется так, как будто она выбирается, но сеанс не запускается. Если я удерживаю палец на карте в течение трех секунд, то срабатывает селекция. Почему это поведение? Есть ли способ выбрать ячейку без этого длительного нажатия?

Вот мой переход код-

if([segue.identifier isEqualToString:@"showRouteDetail"]){ 
    RouteDetailTableTableViewController *routeDetailViewController=(RouteDetailTableTableViewController*)segue.destinationViewController; 
    CoreDataHelper *cdh = [(AppDelegate *)[[UIApplication sharedApplication] delegate] cdh]; 
    routeDetailViewController.selectedItemID = 
    [[self.frc objectAtIndexPath:[self.tableView indexPathForSelectedRow]] objectID]; 

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

Вот раскадровка segue- enter image description here

+0

необходимо добавить код. Если к каждой статической ячейке прикреплен segue, то методы не должны иметь значения. Но вы ничего не указали. Какой код вы используете, если он отправляет данные из ячейки представления таблицы в другое представление. –

+0

Это динамическая таблица, а не статическая. Сегэ подключен к ячейке прототипа в раскадровке. – David

+0

У вас есть решение проблемы. –

ответ

0

Я заметил несколько вещей, и есть несколько предложений.

  1. Могу ли я спросить, почему у вас есть 3 segues в одном и том же виде? Это может иметь какое-то отношение к нему, поскольку оно пытается ориентироваться, какой segue является тем, который требуется, поскольку есть несколько подключений к одной и той же ячейке с помощью прикрепленного изображения.

  2. Вы пытались удалить все segues, а затем снова подключить только один и проверить, работает ли это каждый раз?

  3. Я также вижу, что связанный и выделенный сегмент называется showRouteDetail, но ваш код prepareForSegue имеет showTourDetail. Измените это и на код.

Мое предложение было бы иметь отдельный SEGUE и вид на New Route. Это поможет не только аккуратно сохранять данные, но и отображать существующие данные в своем собственном представлении. Я часто вижу Stackoverflow людей, которые дважды сохраняют одни и те же данные или сохраняют их два раза, а один появляется пустым, когда они только хотят сохранить один раз. Кроме того, вы уверены, что ваш segue связан с ячейкой, а не с UIImage или ярлыками?

Наконец заменить код с этим:

NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow]; 

TourDetailTableViewController * tourDetailViewController= segue.destinationViewController; 

//assuming you are using fetchedResultsController method to load your data in table view 
SkiTour *selectedTour = (SkiTour*) [[self fetchedResultsController] objectAtIndexPath:indexPath]; 

tourDetailViewController.tourID =selectedTour.objectID; 

Это лишь некоторые простые проверки и изменения.

ОБНОВЛЕНИЕ НА ОСНОВЕ НОВЫХ ДЕТАЛЕЙ

Если у вас есть кнопка перекрывает MapView, было бы лучше, чтобы программно поменять взгляды, чем иметь SEGUE подключен. Для этого добавьте этот код в корреляционную кнопку:

- (IBAction) viewMapButton: (UIButton *)sender{ 

    //create access to the next view 
    NSString * storyboardName = @"Main"; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil]; 
    UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"ViewMap"]; 

    //this will perform a push segue so that navigation bar still exists and can respond 
    [self.navigationController pushViewController: vc animated:YES]; 

} 
+0

Что-нибудь еще работает? –

+0

Извините, я скопировал неправильный код segue (теперь исправлен). Три сегмента - одна для кнопки «Новый маршрут» поверх таблицы, одна для временной кнопки над картой, чтобы вызвать сегмент, и тот, который я пытаюсь выполнить. Даже когда я удаляю эти сегменты, я получаю тот же результат. Кажется, что UILabel передает касание к ячейке, но MapView не делает этого? – David

+0

@ David Не подключайтесь к кнопке внутри многоразовой TableView Cell, это распространенная причина проблем. Подключите segue непосредственно к ячейке или используйте код в IBaction для обмена мнениями. Я обновлю свой ответ, чтобы показать, как это сделать. Есть ли причина, почему вы подключаетесь к карте, а не к ячейке? Кроме того, соединение segue с меткой не работает (по моему опыту), потому что метка статична, она не обрабатывает никаких действий. –

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