2017-01-12 50 views
0

允許我通過說我看到了類似於堆棧溢出的不同問題(並且我是iOS/Swift的總新手),並且他們確實有幫助。但是,現在我的問題如下,實際上是2.如何正確創建一個帶有內部圖像的按鈕

第一個問題是,是否可以在viewDidLoad方法中嵌套函數?當我嘗試它作爲func createButton時,它甚至不會顯示兩個不同的新按鈕,事實上它除了通過故事板添加的奇異圖像外沒有任何顯示。

第二個問題是引用圖像的正確方法是什麼,因爲當我嘗試運行我的代碼時,我看到創建了兩個只有藍色背景的按鈕。對此的擴展是創建按鈕的「action:」部分的正確語法,因爲我不知道什麼是引用您自己的函數的有效方法。

代碼如下:

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     var imageNames : [String] = ["dino2Button", "dino3Button"] 
     var yposition : Int = 133 
     let xposition : Int = 112 
     let width : Int = 150 
     let height : Int = 113 

     //func createButton() { 
      for index in 0...1 { 
       print("index is: \(index)") 
       let image = UIImage(named: imageNames[index]) as UIImage? 
       let button = UIButton(type: .roundedRect) as UIButton 
       button.frame = CGRect(x: xposition, y: (yposition+10), width: width, height: height) 
       yposition += height + 10; 
       button.setImage(image, for: .normal) 
       button.addTarget(self, action: "", for: .touchUpInside) 
       self.view.addSubview(button) 

      } 
     //} 


    } 

再一次,我一直在做的iOS爲總計兩天。

+0

這裏有幾件事情是錯誤的。首先,也許最重要的是 - 如果你僅僅花了兩天的時間學習iOS和Swift(並且你做得很好),現在考慮花時間**來學習自動佈局而不是幀。不同的設備具有不同的幀大小,自動佈局非常值得。其次,您看到空白/藍色圖像的原因是由於您的UIImage爲零。檢查拼寫,包括大小寫。而且,沒有文件擴展名的唯一UIImage(named :)是PNG(也區分大小寫)。如果它是.jpg,則需要添加「.jpg」。 – dfd

+0

第三,addTarget中的動作是Selector類型 - 因此語法上的make是**#selector(myFunc)**並添加一個簡單的func來執行類似於** print(「got here」)**的操作,以確保事物被連線正確。祝你好運! – dfd

+0

@dfd感謝您的幫助指針。顯然我的問題是,它應該是button.setBackgroundImage而不是.setImage;雖然可能他們的類型可能是.jpg而不是.png(我認爲我沒有檢查過)。我一定會考慮自動佈局。另外,在爲iOS開發時,一個簡單的問題是更經常用於佈局的故事板,還是故事板和代碼的平衡組合?乾杯! – SomeStudent

回答

0

是的,只要它們不執行異步操作,就可以在視圖中嵌套函數。如果他們是你必須知道,你不能保證他們會在你的觀點出現之前完成。但除此之外,嵌套函數沒有真正的問題。

編輯:檢查蘋果documents

將圖片添加到您的按鈕,它是這樣的:

button.setImage(UIImage(named: "checkbox_off"), for: .normal) 
button.setImage(UIImage(named: "checkbox_on"), for: .selected) 
button.setImage(UIImage(named: "checkbox_on"), for: .highlighted) 

一個動作添加到按鈕:

button.addTarget(self, action: #selector(CheckBox.touchUpInside(_sender:)), for: .touchUpInside) 

在哪裏CheckBox是你的班級名稱(按鈕被放置的位置或者你想要調用的任何其他位置,目標是poi nting at(在這種情況下爲「self」))

func touchUpInside(_sender: Any?) { 

    self.isSelected = !(self.isSelected) 

} 
+0

現在,我能夠通過執行以下操作來計算按鈕操作:#selector(clicky(sender :))。作爲來自Java世界的一切都是類的人,在這種情況下,我的CheckBox類名是什麼?此外,是我試圖設置我的按鈕背景圖像不正確,因爲它顯示它只是一個藍色的屏幕。 – SomeStudent

+0

好吧,我會被詛咒,它是button.setBackgroundImage。我看到的所有其他答案都設置爲只是button.setImage – SomeStudent

+0

它也可以,但他們做不同的事情。背景圖片可以讓你有一個文本infront和圖像作爲背景。設置的圖像使圖像成爲實際的按鈕。 – Pochi

相關問題