【发布时间】:2014-04-21 19:16:28
【问题描述】:
我在视图控制器上有一个按钮,它显示了一个模态视图控制器。在 viewcontroller 的 init 方法中,我正在初始化一个 UIImage 视图,在它之上是一个自定义视图,在最后一个之上我有一个按钮(完成)。当我按下完成按钮时,我想关闭模态视图控制器,并且我想弹出初始视图控制器(呈现模态视图控制器的那个)。问题是我收到以下错误:
2014-04-21 19:31:16.223 Signature[5343:60b] -[UIImageView setEnableSetNeedsDisplay:]: unrecognized selector sent to instance 0x16d73550
以下是相关代码:
这是我实例化模态视图控制器时执行的操作:
- (void) onSignButtonPressed: (id)sender
{
PPSSignatureViewController *ppsSignatureViewController = [[[PPSSignatureViewController alloc] initWithNibName:nil bundle:nil documentViewController:self] autorelease];
ppsSignatureViewController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:ppsSignatureViewController animated:NO completion:^{
printf("done!!!");
}];
[self.navigationController popViewControllerAnimated:YES];
}
这是在模态视图控制器被实例化时执行的代码:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil documentViewController:(MuDocumentController*)dController
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
PPSSignatureView *signatureView =
[[[PPSSignatureView alloc] initWithFrame:[[UIScreen mainScreen] bounds] context:context] autorelease];
signatureView.opaque = NO;
signatureView.backgroundColor = [UIColor clearColor];
UIGraphicsBeginImageContext(dController.view.bounds.size);
[dController.view drawViewHierarchyInRect:dController.view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *backView = [[UIImageView alloc] initWithImage:image];
signatureView.frame = backView.bounds;
UIButton *finishSignatureButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[finishSignatureButton addTarget:self
action:@selector(finishSignatureButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[finishSignatureButton setTitle:@"Salveaza semnatura" forState:UIControlStateNormal];
finishSignatureButton.frame = CGRectMake(signatureView.frame.size.width - 210, signatureView.frame.size.height - 50, 200, 40.0);
finishSignatureButton.backgroundColor = [UIColor whiteColor];
[backView addSubview:finishSignatureButton];
self.view = backView;
self.view.backgroundColor = [UIColor clearColor];
[backView release];
[finishSignatureButton release];
[signatureView release];
[image release];
}
return self;
}
最后这是由finishSignatureButton触发的代码:
- (void) finishSignatureButtonPressed: (id)sender
{
printf("DOne");
[self.presentingViewController dismissViewControllerAnimated:YES completion: nil];
}
我需要知道我做错了什么?我是客观 C 编程的菜鸟。我尝试以多种方式消除视图,但都没有成功......另外,我不知道我所做的是否正确以及订单是否正常。签名视图控制器的 init 方法中的操作顺序似乎很重要。任何帮助都感激不尽。
【问题讨论】:
-
我在顶部看到一个
autorelease。这些天您为什么不使用自动引用计数 (ARC)? -
谢谢!我启用了 ARC 模式,重构了代码,效果很好。没有更多的内存问题!
标签: objective-c ios7 uiviewcontroller presentmodalviewcontroller