我有UIViewController的简单子(monad)类(下面的代码)。
如果我附加inputAccessoryView,则永远不会取消分配我的viewcontroller。如果未在viewDidLoad中设置inputAccessoryView,则按预期调用dealloc。
我想念什么吗?
@interface IMTestViewController : UIViewController
@property (nonatomic, strong) UIView *messageInputView;
@property(nonatomic, readwrite, strong) UIView *inputAccessoryView;
@end
@implementation IMTestViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.inputAccessoryView = self.messageInputView;
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (UIView *)messageInputView
{
if (_messageInputView == nil)
{
_messageInputView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 45)];
_messageInputView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
}
return _messageInputView;
}
@end
我的想法已经用光了。
谢谢你。
最佳答案
对我来说不幸的是,@ rdelmar的答案没有用。经过一段时间的尝试后,我找到了这篇文章:http://derpturkey.com/uitextfield-docked-like-ios-messenger/
我的目标是使输入附件 View 可见,即使没有键盘也是如此,就像所有IM应用程序一样。我以前将UIViewController
自定义类分割为子类,以使其成为第一响应者,并将自定义 subview 作为inputAccessoryView
返回。这防止了 View Controller 被释放。现在,我将 Controller 的 View 子类化,以实现与上面的链接中所建议的相同的事情,一切似乎都可以正常工作。
编辑:经过更多测试后,我可以确认自定义UIView被释放就好了。
编辑2:唯一的缺点是您不能使键盘出现在viewWillAppear
中,inputAccessoryView
尚未添加到 View 层次结构中,并且不能成为第一响应者。
关于ios - 带有inputAccessoryView的UIViewController未释放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24596031/