2013-09-04 53 views
6

nếu tôi cố gắng hiển thị một AlertView bị chặn trong Phương pháp ViewDidAppear trên iOS 7, tôi sẽ không thể loại bỏ AlertView. Không có sự kiện chạm nào sẽ đến được AlertView. Nút của Chế độ xem sẽ được tô sáng nhưng không có gì xảy ra. Nếu tôi chạy cùng một mã trên iOS < 7, nó sẽ hoạt động tốt.Hiển thị một UIAlertView bị chặn trong ViewDidAppear Phương pháp trên iOS 7 với Xamarin.iOS không hoạt động

Đây là đoạn mã ví dụ:

public override void ViewDidAppear(bool animated) 
    { 
     base.ViewDidAppear(animated); 

     var alert = new UIAlertView("Title", "Message", null, "OK"); 
     alert.Dismissed += (sender, args) => result = true; 
     alert.Show(); 

     while (!result) 
      NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1)); 
    } 

Tôi đang sử dụng Xamarin.iOS Version 6.4.3.0 với Apple SDK 6.1. Tôi gặp vấn đề tương tự với alpha của Xamarin.iOS 6.9.6.0 và Apple SDK 7.0.

Ai đó có thể cho tôi biết vấn đề là gì?

Cảm ơn bạn đã trợ giúp.

+0

iOS7 vẫn còn trong NDA và bạn không có quyền thảo luận ở nơi công cộng. –

+3

iOS7 được phát hành hôm nay. Một câu trả lời sẽ được đánh giá cao, vì tôi có cùng một vấn đề ... – jbandi

Trả lời

-1

Bạn nên thêm

alert.Clicked += AlertViewClick; 

và làm công cụ trong

private void AlertViewClick (object sender, UIButtonEventArgs ea) 
{ 
    //Stuff Here 
} 

và loại bỏ

while (!result) 
      NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1)); 
2

Đó không phải là ý tưởng tốt để sử dụng NSRunLoop để chặn thực thi giao diện người dùng, nhưng chắc chắn có một cách tốt hơn để làm điều đó.

Bạn có thể sử dụng mẫu không đồng bộ/chờ đợi để đợi người dùng nhấn nút UIAlertView. Đây là mẫu mà bạn có thể sử dụng: https://gist.github.com/prashantvc/6725882

1

Theo this Apple developer forum thread, iOS 7 có lỗi khi đại biểu UIAlertView sẽ không bao giờ được gọi khi RunLoop được bắt đầu. Theo một người, nó vẫn có thể hoạt động trên iPad. Bạn có thể đăng ký cập nhật email cho chuỗi diễn đàn đó trong trường hợp sửa chữa hoặc giải quyết sự cố.

+0

Được phát hiện độc đáo, tôi hy vọng sẽ có bản sửa lỗi trong bản phát hành sắp tới của iOS. Sách hướng dẫn iOS6 của Erica Sadun có biên nhận về việc triển khai ModalAlertDelegate: https://github.com/erica/iOS-6-Cookbook/blob/master/C03%20Alerts/02%20-%20Modal/ModalAlertDelegate.m Công thức này không hoạt động nữa trong iOS7, những nhà phát triển kém đã áp dụng công thức trong ứng dụng của họ (như tôi đã làm). – jbandi

+0

Vâng, rất nhiều người đã làm điều tương tự bằng cách sử dụng Monotouch/Xamarin dựa trên ví dụ C# này: http://stackoverflow.com/questions/4248244/iphone-uialertview-modal/4807697#4807697 –