2016-03-21 11 views
0

Ich möchte ein Popover mit einer Signatur "Zeichnung" haben, wenn ich in eine Tableviewcell klicke. , wie dieses Bild: enter image description hereIch möchte, dass ein "Zeichen-Popover" erscheint, wenn Sie in eine Tabellenansicht klicken.

So, hier ist mein Code:

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

Das Problem, dass, wenn ich auf dem tableviewcell klicken, das funktioniert gut in der TableViewCell genannt werden, aber sie nicht wenn ich auf dem popover genannt:

- (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 Frage: Wie kann ich im Popover-SubView die TouchesBegan, touchesMoved und touchesEnded aufgerufen haben? Vielen Dank im Voraus: D

Antwort

1

Die Touch-Methoden werden nicht aufgerufen, da der Popover ein separater View-Controller ist. Ihre touchesBegan und verwandte Methoden sind an der falschen Stelle.

Damit alles funktioniert, erstellen Sie einfach eine neue UIViewController-Unterklasse, z. B. SignatureViewController.

Dann ersetzen Sie die erste Zeile:

viewController = [[UIViewController alloc] init]; 

zu

viewController = [[SignatureViewController alloc] init]; 

und implementieren Ihre Berührung Methoden innerhalb SignatureViewController.m

+0

Ihnen sehr Vinod danken, gespeichert Sie mir einige Codierung Stunden heute Abend ;) – Claudio