7

我想在UIAlertController或UIPopoverController中顯示UIPickerView,我是iOS新手,請給我一些示例代碼。想在UIAlertController或UIPopoverController Swift中顯示UIPickerView?

我搜索了他們,但找不到任何滿意的答案。我不想在UIActionSheet上這樣做,因爲它在iOS 9中已被棄用。我也希望它在Swift中不在Obj-C中。我嘗試了下面的例子,但它不適合我。

http://makeapppie.com/2014/08/30/the-swift-swift-tutorials-adding-modal-views-and-popovers/

+0

請審查:http://stackoverflow.com/questions/25545982/is-there-any-way-to-add-uipickerview-into-uialertcontroller-alert-or-actionshee –

+0

在上面的例子中,「Profiles」會給出錯誤。不爲我工作。 –

+0

我的朋友,「個人資料」,「用戶」是另一個來源的字段。您必須設置適當的字段或刪除它們。 –

回答

2

以下代碼適用於顯示uipickerview的UIAertController。以前它會給iPad帶來錯誤,當我爲iPhone更正它時。它現在在兩個方面工作。 iPad和iPhone。

let alertView = UIAlertController(title: "Select Launguage", message: "\n\n\n\n\n\n\n\n\n\n", preferredStyle: UIAlertControllerStyle.ActionSheet); 
    if !DeviceType.IS_IPAD{ 
    pickerView.center.x = self.view.center.x 
    } 
    alertView.view.addSubview(pickerView) 
    if DeviceType.IS_IPAD{ 
     alertView.popoverPresentationController?.sourceView = self.view 
     alertView.popoverPresentationController?.sourceRect = self.pickerView.bounds 
    } 
    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 

    alertView.addAction(action) 
    presentViewController(alertView, animated: true, completion: nil) 

用於選擇設備。代碼如下所示:

enum UIUserInterfaceIdiom : Int 
{ 
    case Unspecified 
    case Phone 
    case Pad 
} 

struct ScreenSize 
{ 
    static let SCREEN_WIDTH   = UIScreen.mainScreen().bounds.size.width 
    static let SCREEN_HEIGHT  = UIScreen.mainScreen().bounds.size.height 
    static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) 
    static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) 
} 

struct DeviceType 
{ 
    static let IS_IPHONE_4_OR_LESS = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0 
    static let IS_IPHONE_5   = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0 
    static let IS_IPHONE_6   = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0 
    static let IS_IPHONE_6P   = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0 
    static let IS_IPAD    = UIDevice.currentDevice().userInterfaceIdiom == .Pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0 
} 
9

你Basic代碼如下所示:

let alert = UIAlertController(title: title, message: message, preferredStyle: .actionSheet) 
alert.isModalInPopover = true 

// Create a frame (placeholder/wrapper) for the picker and then create the picker 
let pickerFrame = CGRect(x: 17, y: 52, width: 270, height: 100) // CGRectMake(left), top, width, height) - left and top are like margins 
let picker = UIPickerView(frame: pickerFrame) 

// set the pickers datasource and delegate 
picker.delegate = self 
picker.dataSource = self 

// Add the picker to the alert controller 
alert.view.addSubview(picker) 

//Do stuff and action on appropriate object. 

請查看下面的答案。

Is there any way to add UIPickerView into UIAlertController (Alert or ActionSheet) in Swift?

+0

我正在努力解決它。謝謝你的回答。如果它適用於我,我會將它打勾爲正確答案。 –

+0

@IbadUrRahman,Ok,NP。如果您需要任何幫助,請隨時與我聯繫。快樂編碼! –

+0

我添加選擇器視圖來提醒,但選擇器視圖不顯示在警報中。選擇器視圖創建意志和工作沒有警報,但不使用警報視圖。 –

2

定義pickerView,數據源和委託自己,試試這個代碼。

func createAlertView() { 

    let alertView = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert) 

    pickerView = UIPickerView(frame: CGRectMake(0, 0, 250, 60)) 
    pickerView?.dataSource = self 
    pickerView?.delegate = self 

    alertView.view.addSubview(pickerView!) 

    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 

    alertView.addAction(action) 
    presentViewController(alertView, animated: true, completion: nil) 
} 

所有其他答案都很好,我不明白爲什麼它不適合你。添加你的代碼,也許我們可以幫忙。

0

您可以製作自定義的UIAlertView或UIAlertViewController。這將包含您的pickerview和您的自定義警報中所需的任何其他內容。

首先,創建一個新的.xib文件,並使其成爲警報的大小。 然後,放入你的圖形。

現在創建一個swift文件,UIAlertView的子類並將其命名爲合適的名稱。

新建>文件>可可觸摸子類

(或類似的東西)

讓你的.xib文件,你的UIAlertView中的類名。

將您的元素從.xib拖到新的swift文件中並正確命名它們。

現在使用您的警報視圖,而不是默認警報視圖。

0

如果您遵循代碼,您可以看到UIAlertController用於顯示ActionSheets和/或警報。你不應該以艱難的方式給他們添加子視圖,你將無法預測行爲是否會受到影響。

也是從iOS 9開始,UIPopoverController已被棄用。但在iOS 8中,UIPopoverPresentationController和它的代表在哪裏介紹,以幫助實現你想要的。 (閱讀更多關於他們here

所以你可以使用它來讓你的Picker顯示自己作爲iPad上的彈出窗口,但是如果我沒有記錯的話,它不會顯示在iPhone上。

底線是:簡單的方法是,製作一個自己的自定義視圖並讓它實現彈出式委託協議。它應該相當簡單。如果您對如何做一些事情有更多疑問,請在StackOverflow中搜索此處或發佈一個新問題。

相關問題