UIViewController
을 모달로 표시하며 해당보기에 다양한 UITextFields
이 포함되어 있습니다. 나는 모달보기 InputAccessoryView
을 오버라이드하여 단순한보기를 보여주고 하나의 버튼은 에서 UITextField
으로 바뀌어 키보드를 닫습니다.InputAccessoryView가 재정의 된 경우 Modal View 소멸자가 호출되지 않음
최근에 저는 메모리 관련 문제를 정리하여 모든 컨트롤러에 이제 소멸자가 있습니다. Modal View가 해제 될 때마다 키보드가 오버라이드 된 InputAccessoryView
으로 표시 될 때마다 소멸자가 호출되지 않는다는 것을 알았습니다. 이것이 UIViewController
이 파괴되지 않는다는 것을 의미합니까? InputAccessoryView를 잘못 표시하고 있습니까? 다음과 같이
InputAccessoryView
코드는 다음과 같습니다
bool accessoryViewInit = false;
UIView accessoryView = new UIView(new RectangleF(0,0,320,30));
public override UIView InputAccessoryView
{
get
{
if (!accessoryViewInit)
{
accessoryView.BackgroundColor = UIColor.FromRGBA(0.0f, 0.0f, 0.f, 0.5f);
UIButton dismiss = new UIButton(new RectangleF(50,1, 200, 28));
dismiss.BackgroundColor = UIColor.Blue;
dismiss.SetTitle("Close Keyboard", UIControlState.Normal);
dismiss.TouchUpInside += delegate(object sender, EventArgs e) {
field1.ResignFirstResponder();
field2.ResignFirstResponder();
field3.ResignFirstResponder();
};
accessoryView.AddSubview(dismiss);
}
return accessoryView;
}
}
I가 내가이에 대한 참조를 유지하고, 버튼의 TouchUpInside
이벤트에 대리자를 지정하고 있습니다 때문입니다 느낌, 전체 컨트롤러가 파괴되는 것을 막는가?
내가 문제를 다시 만들려면 https://github.com/lukewhitt/InputAccessoryView-test
에서 찾을 수있는 샘플 프로젝트를 만들었습니다 실행 앱 큰 빨간 버튼을 터치하여 현재 모달보기를. 이제 키보드를 표시하지 않고 뷰를 닫으면 소멸자가 호출됩니다. UITextField
의 첫 번째 응답자 (키보드 및 InputAccessoryView
표시)를 누른 다음 모달 컨트롤러를 닫으면 소멸자가 호출되지 않습니다.
편집
그것은이 업 오는 릴리스에서 수정 될 예정입니다 Monotouch에서 버그가 나타납니다. 이 문제를 해결하기 위해 이벤트에 할당 할 때 익명의 대리자를 사용할 수없는 것 같습니다. 그래서 dismiss.TouchUpInside
이 될 것입니다 : 소멸자가 발생
if (dismiss != null)
{
dismiss.TouchUpInside -= HandleDismissTouch;
dismiss.Dispose();
dismiss = null;
}
호출 할 :
public override UIView InputAccessoryView {
// code before
dismiss.TouchUpInside += HandleDismissTouch;
// rest of code
}
private void HandleDismissTouch (object sender, EventArgs e)
{
field1.ResignFirstResponder();
field2.ResignFirstResponder();
field3.ResignFirstResponder();
}
을 다음 모달 컨트롤러를 일축 코드에서, 나는 다음과 같은 추가했습니다! 난 당신이 MT 4에서 수정 될 예정입니다 MT에서이 문제에 직면하고 있다고 생각
올바른 방향으로 나를 가리켜 주셔서 감사합니다! – Luke
비슷한 문제가 있는지 코드를 확인하겠습니다. a) MT4가 출시 될 때와 b) 오래된 MT 릴리스에서 문제를 방지하는 것이 가장 좋은 방법인지 알아 보는 것은 흥미로울 것입니다. – Krumelur