2017-07-28 54 views
0

我試圖創建點擊的滾動視圖按鈕像這樣(在底部): enter image description here如何創建自定義uiview,該按鈕可以在uiview中點擊?

這是到目前爲止我的代碼:

scView = UIScrollView(frame: CGRect(x: 0, y: view.frame.maxY-110, width: view.bounds.width, height: 110)) 
    self.view.addSubview(scView) 

    scView.backgroundColor = UIColor.lightGray 
    scView.translatesAutoresizingMaskIntoConstraints = false 

    for i in 0 ... 10 { 
     let myNewView=UIView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100)) 
     myNewView.backgroundColor=UIColor.white 
     myNewView.layer.cornerRadius=10 
     self.scView.addSubview(myNewView) 

     let label = UILabel(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding)+5, width: 150, height: 10)) 
     label.center = CGPoint(x: 160, y: 285) 
     label.textAlignment = .left 
     label.text = "I'am a title label" 
     label.textColor = .black 
     myNewView.addSubview(label) 

     let ditancelabel = UILabel(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding)+5, width: 50, height: 10)) 
     ditancelabel.center = CGPoint(x: 160, y: 285) 
     ditancelabel.textAlignment = .right 
     ditancelabel.text = "0.04 km" 
     ditancelabel.textColor = .red 
     myNewView.addSubview(ditancelabel) 

     let textView = UITextView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding)+15, width: 200.0, height: 40.0)) 
     self.automaticallyAdjustsScrollViewInsets = false 
     textView.center = self.view.center 
     textView.textAlignment = NSTextAlignment.justified 
     textView.textColor = UIColor.lightGray 
     textView.backgroundColor = UIColor.clear 
     myNewView.addSubview(textView) 

     let button = UIButton() 
     button.tag = i 
     button.backgroundColor = UIColor.white 
     button.setTitle("\(i)", for: .normal) 
     button.setTitleColor(.black, for: .normal) 
     button.backgroundColor = UIColor.clear 
     button.addTarget(self, action:#selector(handleRegister(sender:)), for: .touchUpInside) 
     button.frame = CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100) 
     xOffset = xOffset + CGFloat(buttonPadding) + button.frame.size.width 
     myNewView.addSubview(button) 
    } 

    scView.contentSize = CGSize(width: xOffset, height: scView.frame.height) 

但代碼的結果是這樣的: enter image description here

第一按鈕可以被點擊,但另一個不能被點擊。並沒有出現2個UILabels和1個UITextView。

handleRegister方法是獲取發件人標籤並將其打印爲日誌,以瞭解該按鈕是否可以點擊。

如何修復代碼,使其可以像上圖中的自定義UIView?

我需要通過單擊按鈕將標籤和文本視圖文本轉移到另一個視圖控制器,該視圖控制器通過handleRegister中的seque處理。

回答

0

1)你看不到,因爲你的容器視圖大小的標籤和其他控制(200,100)

let myNewView=UIView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100)) 

和你設置的控制中心。

label.center = CGPoint(x: 160, y: 285) 

ditancelabel.center = CGPoint(x: 160, y: 285) 

此中心點在容器視圖中不可見。這就是爲什麼你看不到標籤。 只需註釋這些行即可設置標籤的中心,您可以完美地看到這些標籤。

2)我需要通過按鈕點擊傳遞標籤和textview文本到另一個viewcontroller,通過handleRegister中的seque處理。

我希望你有一個數組,在其中存儲數據以顯示在你的自定義視圖中,只需從基於按鈕標籤的數組中找到該對象,並將該對象傳遞給另一個控件。

3)第一個按鈕可以被點擊,但另一個不能被點擊。

再次問題與標籤相同。您設置了按鈕的框架是這樣

button.frame = CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100) 

,並增加X偏移通過此行來創建另一個視圖

xOffset = xOffset + CGFloat(buttonPadding) + button.frame.size.width 

X偏移每次增加與按鈕的大小。因此,如果在打印X偏移值,它實際上打印像(假設X偏移= 10的初始值,填充= 0)

for i in 0 ... 10 { 
print(xOffset) 
..... your other code 

} 

輸出:會像 10,210,410,610 .... ..因爲這個,你的按鈕與容器視圖不在一起,因此你不能點擊它。

我已經更新了你的代碼,檢查以下

scView = UIScrollView(frame: CGRect(x: 0, y: view.frame.maxY-110, width: view.bounds.width, height: 110)) 
    self.view.addSubview(scView) 

    scView.backgroundColor = UIColor.lightGray 
    scView.translatesAutoresizingMaskIntoConstraints = false 

    for i in 0 ... 10 { 
     let myNewView=UIView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100)) 
     myNewView.backgroundColor=UIColor.white 
     myNewView.layer.cornerRadius=10 
     self.scView.addSubview(myNewView) 

     let subVwOffset = 5 

     let label = UILabel(frame: CGRect(x: subVwOffset, y: CGFloat(buttonPadding)+5, width: 150, height: 10)) 
     label.textAlignment = .left 
     label.text = "I'am a title label" 
     label.textColor = .black 
     myNewView.addSubview(label) 

     let ditancelabel = UILabel(frame: CGRect(x: subVwOffset, y: CGFloat(buttonPadding)+5, width: 50, height: 10)) 
     ditancelabel.textAlignment = .right 
     ditancelabel.text = "0.04 km" 
     ditancelabel.textColor = .red 
     myNewView.addSubview(ditancelabel) 

     let textView = UITextView(frame: CGRect(x: subVwOffset, y: CGFloat(buttonPadding)+15, width: 200.0, height: 40.0)) 
     self.automaticallyAdjustsScrollViewInsets = false 
     textView.center = self.view.center 
     textView.textAlignment = NSTextAlignment.justified 
     textView.textColor = UIColor.lightGray 
     textView.backgroundColor = UIColor.clear 
     myNewView.addSubview(textView) 

     let button = UIButton() 
     button.tag = i 
     button.backgroundColor = UIColor.white 
     button.setTitle("\(i)", for: .normal) 
     button.setTitleColor(.black, for: .normal) 
     button.backgroundColor = UIColor.clear 
     button.addTarget(self, action:#selector(handleRegister(sender:)), for: .touchUpInside) 
     button.frame = CGRect(x: subVwOffset, y: CGFloat(buttonPadding), width: 200, height: 100) 
     xOffset = xOffset + CGFloat(buttonPadding) + button.frame.size.width 
     myNewView.addSubview(button) 
    } 

    scView.contentSize = CGSize(width: xOffset, height: scView.frame.height) 

我們,如果你發現任何其他困難我知道。

+0

1.我看到問題。中心。 – Sarimin

+0

但如何使所有的循環按鈕可以點擊? – Sarimin

+0

@Sarimin檢查我的答案,我已經更新了我的答案。 – Surjeet