У меня есть простой подкласс UIViewController (код ниже). Если я присоединю inputAccessoryView, мой диспетчер представлений никогда не будет освобожден. Если я не установлю inputAccessoryView в viewDidLoad, dealloc вызывается как и ожидалось.UIViewController с inputAccessoryView не освобождается
Я что-то упустил?
@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
У меня кончились идеи. Спасибо.
Вы хотите, чтобы этот inputAccessoryView был добавлен на клавиатуру, которая появляется? Если это так, вы делаете это неправильно. inputAccessoryView - это свойство в UITextField, а не UIViewController. Я не уверен, почему делать это таким образом, чтобы ваш контроллер не был освобожден, но если вы измените имя на нечто иное, чем inputAccessoryView, оно будет отменено правильно. Таким образом, кажется, что использование этого имени свойства неверно путает систему как-то. – rdelmar
, пожалуйста, добавьте код, используемый для установки 'self.messageInputView' и кода, используемого для представления' IMTestViewController' – Rafeek
@rdelmar, inputAccessoryView является свойством UIResponder, который является суперклассом UIViewController. – hybridcattt