Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Всплывающее окно в UITableViewcell приходит не сразу.

Автор вопроса: CodeTryОтветов: 1

У меня есть динамический tableviewcontroller SideBarTableViewController.m / .h.
У меня есть всплывающий контроллер представления - popUpViewController.m / .h Сделали подкласс ячейки SideBarTableViewController -> RegisterTableViewCell.m / .h и добавили кнопку выхода из ячейки к нему. Подключили ячейку к popUpViewController в раскадровке, используя переход "Present As popover", и переходу присвоен идентификатор "popover". Точка привязки в раскадровке сейчас установлена ​​на Tableview, а позже в preparesegue ее изменили.

RegisterTableViewCell.h

@property (weak, nonatomic) IBOutlet UIButton *PopoverAnchorButton;

SideBarTableViewController.m

#import "RegisterTableViewCell.h"
 (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if([segue.identifier isEqualToString:@"popover"] && segue.destinationViewController.popoverPresentationController){
    UIPopoverPresentationController *popController = segue.destinationViewController.popoverPresentationController;
    popController.sourceView = sender;
    RegisterTableViewCell *cell = [[RegisterTableViewCell alloc]init];
 segue.destinationViewController.popoverPresentationController.sourceRect = CGRectMake(cell.PopoverAnchorButton.frame.size.width/2, cell.PopoverAnchorButton.frame.size.height, 0, 0);
    popController.delegate = self;
    }
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *cellIdentifier = [menuItems objectAtIndex:indexPath.row];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];


RegisterTableViewCell *regcell = [[RegisterTableViewCell alloc]init];

[regcell.PopoverAnchorButton addTarget:self action:@selector(PresentPopover:) forControlEvents:UIControlEventTouchUpInside];

// Configure the cell...


return cell;

}

-(void) PresentPopover:(UIButton *)sender

{

NSLog(@"present popover called ");

[self performSegueWithIdentifier:@"popover" sender:sender];

}

popUpViewController.m

- (IBAction)closeview:(id)sender {

[self.view removeFromSuperview];

}

Проблема:

Всплывающее окно отображается с левого края ячейки, но, как я вижу, есть задержка в представлении всплывающего окна. Обычно при первом щелчке по ячейке всплывающее окно появляется, как и ожидалось,
второй щелчок -> небольшая задержка,
третий -> немного больше задержки ... (хотя задержка не всегда увеличивается, но фиксируется на 6-7 секунд)

позвольте ipad простаивать, скажем, 6 секунд, и снова щелкните в ячейке, сразу же появится всплывающее окно.

двойной щелчок (2 нажатия) в ячейке отображает ее сразу, но с предупреждением:

2016-07-11 22:53:05.462 Player-app_03[1947:590814] Warning: Attempt to present <UINavigationController: 0x125026400>  on <SideBarTableViewController: 0x124d258f0> which is already presenting (null)

Что здесь происходит ? я невежественен. Кто-нибудь, пожалуйста, помогите.

iosobjective-cuitableviewuipopovercontroller

Ответы

Ответ 1 · рейтинг 1 · danh

Проблема, вероятно, будет найдена в действиях segue.destinationViewController, который из кода OP, кажется, сам обрабатывает другой контроллер представления. Чтобы справиться с этим, опустите имеющуюся у вас prepareForSegue логику и опустите что-либо в viewDidLoad или viewWillAppear целевого vc, что связано с представлением vc.

segue.destinationViewController - это контроллер представления, который будет представлен. Все, что с этим не так, вызывает проблемы.

Увеличение времени задержки, скорее всего, вызвано действием (точнее бездействием) в closeview, которое просто удаляет представление контроллера всплывающего представления, оставляя сам контроллер представления на неопределенное время. Правильное действие в этом методе - вызвать:

[self dismissViewControllerAnimated:YES completion:nil];

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы