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

У меня есть динамический 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)

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


person CodeTry    schedule 06.06.2016    source источник


Ответы (1)


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

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

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

[self dismissViewControllerAnimated:YES completion:nil];

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

person danh    schedule 06.06.2016
comment
Привет, Дан, спасибо, я должен был это использовать. После добавления я заметил некоторое улучшение задержки, но она все еще там, и предупреждение продолжает поступать. - person CodeTry; 06.06.2016
comment
Привет, Дан, я думаю, я только что понял, что после добавления кода ur и, когда я закрываю всплывающее окно с помощью кнопки закрытия, в следующий раз при щелчке всплывающее окно появляется немедленно без задержки, поскольку оно будет правильно освобождать всю память. Но поскольку это присутствует как переход всплывающего окна, прикосновение к любому месту за пределами всплывающего окна должно также закрыть и очистить всплывающее окно, но с этим действием всплывающее окно закрывается, но в следующий раз при щелчке задержка все еще существует. - person CodeTry; 07.06.2016