我有一个功能" addDoneButton"在FirstViewController.swift中,我不想复制并粘贴到SecondViewController.swift中,所以我想在SecondViewController中调用它。
func addDoneButton() {
let keyboardToolbar = UIToolbar()
keyboardToolbar.sizeToFit()
let flexBarButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace,
target: nil, action: nil)
let doneBarButton = UIBarButtonItem(barButtonSystemItem: .Done,
target: view, action: #selector(UIView.endEditing(_:)))
keyboardToolbar.items = [flexBarButton, doneBarButton]
for textField in self.collectionOfTextField! as [UITextField] {
textField.keyboardType = .DecimalPad
textField.inputAccessoryView = keyboardToolbar
}
}
如何实现它?提前感谢新的快捷方式。
答案 0 :(得分:1)
如何创建all.js
的扩展名并将UIViewController
作为参数传递?
collectionTextFields
答案 1 :(得分:1)
您可以制作协议,然后将此方法放在协议扩展中,其中self:UIViewController。然后你想要启用这个函数的任何UIViewController子类,只需将CanAddDoneButton添加到它符合的协议中......但需要注意的是它已经有了collectionTextFields变量。虽然我认为您甚至可以将该变量放入协议扩展中,除非它是IBOutlet。
Sub Transfer()
Dim shSource As Worksheet
Dim cellValue As Long
Dim formatedCellBegin As String
Dim formatedCellEnd As String
Set shSource = ThisWorkbook.Sheets("Sheet1") ' Get info from user input sheet
cellValue = shSource.Cells(4, "H") ' User input taken from "H4" on sheet1 received in regards to what row to start transfer
formatedCellBegin = "J" & cellValue ' Add J to the that row to get the cell to start at
formatedCellEnd = "K" & cellValue ' End at cell K - (whatever they pick)
'Sheet 12 is the sheet with all the invoice info
'Sheet 11 is the sheet to put all the info
Sheets("Sheet12").Range(formatedCellBegin & "," & formatedCellEnd).Copy Sheets("Sheet11").Range("B20")
End Sub
答案 2 :(得分:0)
我认为EridB回答是一个好方法。
或者Swift 2协议扩展怎么样?它与他的答案类似,唯一的区别是并非所有ViewControllers都能访问该方法,除非你遵守协议。
protocol Button { }
extension Button where Self: UIViewController {
func addDoneButton(forCollectionTextFields collectionTextFields: [UITextField]) {
let keyboardToolbar = UIToolbar()
keyboardToolbar.sizeToFit()
let flexBarButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace,
target: nil, action: nil)
let doneBarButton = UIBarButtonItem(barButtonSystemItem: .Done,
target: view, action: #selector(UIView.endEditing(_:)))
keyboardToolbar.items = [flexBarButton, doneBarButton]
for textField in collectionTextFields {
textField.keyboardType = .DecimalPad
textField.inputAccessoryView = keyboardToolbar
}
}
}
在需要调用此方法的viewControllers中,您必须符合协议并调用它。
class SomeViewController: UIViewController, Button {
override func viewDidLoad() {
super.viewDidLoad()
addDoneButton(forCollectionTextFields: self.collectionOfTextField)
}
}
希望这有帮助
答案 3 :(得分:-1)
只需在SecondViewController.swift中尝试:
let firstViewController = FirstViewController()
任何时候你需要这个函数只需要调用:
firstViewController.addDoneButton()