2017-02-08 70 views
0

我有一個UITextField,我在我的collectionViewCell的子視圖中添加了UITextField。下面是代碼:在CollectionViewCell中輸入UITextField(swift 3 xcode)

class ClientCell: UICollectionViewCell { 

var width: CGFloat! 
var height: CGFloat! 

var textField: UITextField! 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    width = bounds.width 
    height = bounds.height 
    setupViews() 
} 

func basicTextField(placeHolderString: String) -> UITextField { 
    let textField = UITextField() 
    textField.font = UIFont.boldSystemFont(ofSize: 12) 
    textField.attributedPlaceholder = NSAttributedString(string: placeHolderString, attributes:[NSForegroundColorAttributeName: UIColor.lightGray, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 12)]) 
    textField.backgroundColor = UIColor.white 
    textField.translatesAutoresizingMaskIntoConstraints = false 
    return textField 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

func setupViews() { 
    backgroundColor = UIColor.white 
    layer.addBorder(edge: UIRectEdge.bottom, color: .black, thickness: 0.5) 

    textField = basicTextField(placeHolderString: "name") 

    addSubview(textField) 

} 

func buttonHandler() { 

    if let textFieldInput = textField.text { 
     print (textFieldInput) 
    } else { 
     print("Nothing in textField") 
    } 
} 

}

我在調用此方法另一個類的按鈕,並且在時刻打印文本字段的當前輸入(其可以是由於在buttonHandler()功能)。問題是,由於某種原因,textField總是返回爲空,我不知道爲什麼。

編輯:

這是函數按下時(按鈕,其功能是在一個單獨的類到文本框)的按鈕調用:

func testButton() { 
    let test = ClientCell() 
    test.handler() 
} 

SOLUTION:

的問題,我當時我正在想要按下按鈕的課程中創建一個我的collectionViewCell的新實例。當函數被調用時,它將是空的。

爲了解決這個問題,我使用NSNotificationCenter每次點擊該按鈕時都發佈一個帖子,並且在發佈帖子時觸發函數的CollectionViewCell類中有觀察者。這是代碼。

功能按下按鈕時調用:

class ClientCell: UICollectionViewCell { 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    NotificationCenter.default.addObserver(self, selector: #selector(handler), name: NSNotification.Name("saveProject"), object: nil) 
} 

最後,由觀察者在該類調用的函數

func handler() { 

    print(textField.text) 
} 
+0

你如何使用按鈕操作調用此方法,希望你不會初始化該C在調用按鈕操作方法時再次調用lass對象。共享按鈕操作的代碼。 –

+0

現在就添加它。 – rob8989

+0

非常明顯,它會一直讓你空空如也。因爲您正在初始化單元格並在該類中創建新的文本字段,所以按鈕操作會返回您新創建的文本字段的值。 –

回答

0

I:內部collectionViewCell的viewDidLoad中

func saveData() { 
    NotificationCenter.default.post(name: NSNotification.Name("saveProject"), object: nil) 
} 

代碼把你的代碼放到我的Playgroud項目中。這是工作。所以我認爲你的問題並不是來自這個班級。 這裏操場代碼:

func buttonHandler() { 
    print(self.textField.text) 
    if let textFieldInput = self.textField.text { 
     print (textFieldInput) 
    } else { 
     print("Nothing in textField") 
    } 
} 

let cell = ClientCell(frame: CGRect(x: 0, y: 0, width: 200, height: 50)) 
cell.buttonHandler() 

控制檯我有這個

可選( 「」)

與空LIGNE。 (由於本打印「打印(textFieldInput)」)

否則,有一些東西在你的代碼來解決:

1)在「basicTextField」功能:你需要指定文本框的邊框

let textField = UITextField(frame: YOUR_DESIRED_FRAME) 

2)在「setupViews」功能,您應該添加文本框在你的細胞中含量查看:

contentView.addSubview(textField) 
+0

但我不應該得到用戶輸入的結果嗎?當我運行我的應用程序時,我將一個字符串放入文本字​​段中,點擊按鈕,然後在控制檯中獲取「可選」(「」)「。我認爲它會打印用戶輸入。 – rob8989

+0

在你的「testButton()」中你應該使用ClientCell(frame :) initialiser來設置你的單元格視圖 –

相關問題