Я хотел бы, чтобы «рисование popover» появлялось, щелкнув в tableviewcell?

Я хотел бы иметь popover с подписью «рисунок», когда я нажимаю на tableviewcell. Как эта картина: введите описание изображения здесь

Итак, вот мой код:

- (void)didSelectWithTableView:(UITableView *)tableView controller:(UIViewController *)controller { red = 0.0/255.0; green = 0.0/255.0; blue = 0.0/255.0; brush = 2.0; opacity = 1.0; viewController = [[UIViewController alloc] init]; mainImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, viewController.view.frame.size.width, viewController.view.frame.size.height)]; mainImage.backgroundColor = [UIColor whiteColor]; tempDrawImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, viewController.view.frame.size.width, viewController.view.frame.size.height)]; tempDrawImage.backgroundColor = [UIColor whiteColor]; [viewController.view addSubview:mainImage]; [mainImage setContentMode:UIViewContentModeScaleToFill]; [viewController.view addSubview:tempDrawImage]; [tempDrawImage setContentMode:UIViewContentModeScaleToFill]; UIButton *saveBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [saveBtn addTarget:self action:@selector(save) forControlEvents:UIControlEventTouchUpInside]; [saveBtn setTitle:@"Save" forState:UIControlStateNormal]; [saveBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; NSLog(@"frame : %@", viewController.view); saveBtn.frame = CGRectMake(viewController.view.frame.origin.x + 570, viewController.view.frame.origin.y + 20, 60.0, 80.0); [viewController.view addSubview:saveBtn]; UIButton *cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [cancelBtn addTarget:self action:@selector(reset) forControlEvents:UIControlEventTouchUpInside]; [cancelBtn setTitle:@"Reset" forState:UIControlStateNormal]; [cancelBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; NSLog(@"frame : %@", viewController.view); cancelBtn.frame = CGRectMake(viewController.view.frame.origin.x + 20, viewController.view.frame.origin.y + 20, 60.0, 80.0); [viewController.view addSubview:cancelBtn]; SignaturePopover = [[UIPopoverController alloc] initWithContentViewController:viewController]; SignaturePopover.delegate = self; SignaturePopover.popoverContentSize = CGSizeMake(644, 425); //your custom size. [SignaturePopover presentPopoverFromRect:self.contentView.frame inView:self.contentView permittedArrowDirections: UIPopoverArrowDirectionDown | UIPopoverArrowDirectionUp animated:YES]; } 

Проблема в том, что когда я нажимаю на tableviewcell, эти функции хорошо вызывают в TableViewCell, но они не вызываются при нажатии на popover:

  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; [self.nextResponder touchesBegan:touches withEvent:event]; NSLog(@"viewController : %@", self.class); if (![self.class isSubclassOfClass: [FXFormSignatureCell class]]) { mouseSwiped = NO; UITouch *touch = [touches anyObject]; lastPoint = [touch locationInView:viewController.view]; } } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesMoved:touches withEvent:event]; [self.nextResponder touchesMoved:touches withEvent:event]; mouseSwiped = YES; UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:viewController.view]; UIGraphicsBeginImageContext(viewController.view.frame.size); [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, viewController.view.frame.size.width, viewController.view.frame.size.height)]; CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush ); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal); CGContextStrokePath(UIGraphicsGetCurrentContext()); self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); [self.tempDrawImage setAlpha:opacity]; UIGraphicsEndImageContext(); lastPoint = currentPoint; // } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesEnded:touches withEvent:event]; [self.nextResponder touchesEnded:touches withEvent:event]; if(!mouseSwiped) { UIGraphicsBeginImageContext(viewController.view.frame.size); [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, viewController.view.frame.size.width, viewController.view.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, opacity); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); CGContextFlush(UIGraphicsGetCurrentContext()); self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } UIGraphicsBeginImageContext(self.mainImage.frame.size); [self.mainImage.image drawInRect:CGRectMake(0, 0, viewController.view.frame.size.width, viewController.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:1.0]; [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, viewController.view.frame.size.width, viewController.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:opacity]; self.mainImage.image = UIGraphicsGetImageFromCurrentImageContext(); self.tempDrawImage.image = nil; UIGraphicsEndImageContext(); NSLog(@"mainimage : %@, tempimage : %@", mainImage, tempDrawImage); } 

Вопрос: Как я могу использовать touchBegan, touchsMoved и touchesEnded, вызываемые в popover subView? Заранее спасибо

Способы касания не вызываются, потому что Popover – отдельный контроллер вида. Ваши touchesBegan и связанные с ними методы находятся в неправильном месте.

Чтобы все работало, просто создайте новый подкласс UIViewController, например SignatureViewController .

Затем замените первую строку:

 viewController = [[UIViewController alloc] init]; 

в

 viewController = [[SignatureViewController alloc] init]; 

И реализуйте свои сенсорные методы в SignatureViewController.m

  • Создание пользовательского popover для iPhone - какой класс я должен использовать для подкласса?
  • Сбой SplitViewController в портретном представлении (ipad)
  • UIPopoverController: Как переместить его?
  • UIPopoverPresentationController / UIPopoverController теряет backgroundColor при вращении интерфейса
  • UIPopoverController: Почему мой popover не появляется там, где я хочу?
  • Как предотвратить изменение цвета разделителя UITableView в UIPopoverController (iOS7)?
  • Слабая ссылка UIPopoverBackgroundView
  • Предотвращение артефактов при уменьшении размера содержимого popover
  • Как отклонить UIPopoverController?
  • Когда предпочтительнееContentSize уважать?
  • Popover из проблемы с позиционированием tableViewCell
  • Давайте будем гением компьютера.