UIAlertController를 인스턴스화하고 UITextField 중 하나에 입력 뷰로 UIDatePicker를 할당합니다. 또한 ValueChanged 이벤트 처리기를 선택기에 할당했습니다. UIDatePicker는 언급 된 UITextField가 포커스를받을 때 올바르게 표시되지만 날짜 값을 변경하면 앱이 충돌합니다.
아래 코드를 고려하십시오.
var d = UIAlertController.Create( "Confirm", "Fill below with the required info.", UIAlertControllerStyle.Alert);
d.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, ((UIAlertAction obj) => SubmitAction(obj, d))));
d.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null));
d.AddTextField((delegate(UITextField obj) {
UIDatePicker picker = new UIDatePicker ();
picker.ValueChanged += (object sender, EventArgs e) => { obj.Text = picker.Date.Description; };
obj.InputView = picker;
}));
PresentViewController(d, true, null);
다시, 선택기가 정상적으로 표시됩니다. EMPTY 처리기가 있더라도 ValueChanged 이벤트에서 앱이 충돌합니다 picker.ValueChanged += (object sender, EventArgs e) => {};
.
이벤트 핸들러를 추가하지 않으면 충돌이 없습니다!
이 코드는 버튼 TouchUpInside 이벤트 핸들러에 있습니다.
내가 어디에서 잘못하고 있습니까?
코드 샘플에서 이벤트 메서드를 혼동했다고 생각합니다. TouchUpInside
피커를 위해 발사되지 않습니다. 새 날짜 값을 선택한 경우 텍스트보기의 내용을 업데이트하려면 다음을 사용해야합니다.
picker.ValueChanged += (pickerSender, pickerArgs) =>
{
obj.Text = picker.Date.Description;
};
충돌을 방지하려면 UIDatePicker 인스턴스에 대한 참조를 유지해야합니다. 그렇지 않으면 너무 일찍 수집됩니다. 가장 쉬운 방법은 날짜 선택기를 클래스 범위로 이동하는 것입니다.
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Perform any additional setup after loading the view, typically from a nib.
this.btnTest.TouchUpInside += HandleTouchUpInside;
}
UIDatePicker picker;
void HandleTouchUpInside (object sender, EventArgs e)
{
var d = UIAlertController.Create( "Confirm", "Fill below with the required info.", UIAlertControllerStyle.Alert);
d.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, ((UIAlertAction obj) => {})));
d.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null));
d.AddTextField((delegate(UITextField obj) {
picker = new UIDatePicker ();
picker.ValueChanged += (pickerSender, pickerArgs) =>
{
obj.Text = picker.Date.Description;
};
obj.InputView = picker;
}));
PresentViewController(d, true, null);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다