2016-03-21 3 views
0

Я хотел бы иметь popover с подписью «рисунок», когда я нажимаю на tableviewcell. Как эта картина: enter image description hereЯ хотел бы, чтобы «рисование 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, но они не вызывается, когда я нажимаю на: пирог

- (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); 
} 

Q uestion: Как я могу использовать touchBegan, touchsMoved и touchEnded, вызываемые в popView subView? Заранее спасибо: D

ответ

1

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

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

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

viewController = [[UIViewController alloc] init]; 

к

viewController = [[SignatureViewController alloc] init]; 

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

+0

Большое спасибо Винод, вы спасли мне несколько часов кодирования сегодня ;) – Claudio