2015-01-23 25 views
12

Tôi đang trong quá trình viết lại ứng dụng từ mục tiêu c sang Swift và tôi nhận thấy rằng UIActionSheet hoạt động khác trong phiên bản Swift so với phiên bản obj-c.UIActionSheet nhanh chóng đặt nút Cancel ở trên iOS 7

obj-c phiên bản

enter image description here

phiên bản Swift

enter image description here

Đây là vấn đề duy nhất trên iOS 7, nó hoạt động tốt (có nghĩa là hủy là ở phía dưới) trên iOS 8 cho cả phiên bản Swift và Obj-c

Đây là đoạn mã có liên quan:

var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: nil) 
sheet.addButtonWithTitle("Camera") 
sheet.addButtonWithTitle("Photo Library") 
sheet.showInView(self.controller.view) 

Bạn có ý tưởng khắc phục sự cố không?

Trả lời

19

Hóa ra đây là một trường hợp khác để tìm câu trả lời ngay sau khi đặt câu hỏi.

Tất cả tôi phải làm là thêm nút Cancel như một nút khác và sau đó xác định chỉ số của nó:

var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil) 
sheet.addButtonWithTitle("Camera") 
sheet.addButtonWithTitle("Photo Library") 
sheet.addButtonWithTitle("Cancel") 
sheet.cancelButtonIndex = 2 
sheet.showInView(self.controller.view) 

Không chắc chắn nếu họ thay đổi cách thức như thế nào UIActionSheet là nghĩa vụ phải làm việc trong Swift hoặc nếu đó là lỗi mà không ai quan tâm để sửa chữa kể từ khi nó bị phản đối trong iOS 8 nào

+1

Đây là điên nhưng nó giúp. Cảm ơn! –

0

đây là những gì tôi đã có trên viewDidLoad() hoặc trên button action đặt mã như thế này:

let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: "Done", otherButtonTitles: "Yes", "No") 
      actionSheet.showInView(self.view) 

sau đó thêm chức năng khác cho hành động của họ như thế này:

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) 
    { 
     switch buttonIndex{ 

     case 0: 
      NSLog("Done"); 
      break; 
     case 1: 
      NSLog("Cancel"); 
      break; 
     case 2: 
      NSLog("Yes"); 
      break; 
     case 3: 
      NSLog("No"); 
      break; 
     default: 
      NSLog("Default"); 
      break; 
      //Some code here.. 

     } 

    } 
Các vấn đề liên quan