스위프트를 사용하여 iOS에서 Numpad에 "완료" 버튼을 추가하는 방법은 무엇입니까?
기본 키보드에서는 잘 작동하지만, 누패드에서는 잘 작동하지 않습니다.
아이디어 있어요?
키보드 부분에 완료 단추를 추가할 수 없는 것으로 알고 있습니다.inputAccessoryView
에게UITextField
또는UITextView
(사용 중인 경우).
자세한 내용은 설명서를 참조하십시오.
편집 2: Swift의 유사한 예.
편집 3: 링크가 만료될 수 있으므로 편집 2의 코드입니다.
override func viewDidLoad()
{
super.viewDidLoad()
//--- add UIToolBar on keyboard and Done button on UIToolBar ---//
self.addDoneButtonOnKeyboard()
}
//--- *** ---//
func addDoneButtonOnKeyboard()
{
var doneToolbar: UIToolbar = UIToolbar(frame: CGRectMake(0, 0, 320, 50))
doneToolbar.barStyle = UIBarStyle.BlackTranslucent
var flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
var done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: Selector("doneButtonAction"))
var items = NSMutableArray()
items.addObject(flexSpace)
items.addObject(done)
doneToolbar.items = items
doneToolbar.sizeToFit()
self.textView.inputAccessoryView = doneToolbar
self.textField.inputAccessoryView = doneToolbar
}
func doneButtonAction()
{
self.textViewDescription.resignFirstResponder()
}
스위프트 4.2
func addDoneButtonOnKeyboard(){
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
txtMobileNumber.inputAccessoryView = doneToolbar
}
@objc func doneButtonAction(){
txtMobileNumber.resignFirstResponder()
}
다음을 사용한 Swift 5 솔루션@IBInpectable
내선 번호를 지정합니다.프로젝트의 모든 UITextField에 대한 Interface Builder의 Attribute Inspector 아래에 드롭다운이 나타납니다.
extension UITextField{
@IBInspectable var doneAccessory: Bool{
get{
return self.doneAccessory
}
set (hasDone) {
if hasDone{
addDoneButtonOnKeyboard()
}
}
}
func addDoneButtonOnKeyboard()
{
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
self.inputAccessoryView = doneToolbar
}
@objc func doneButtonAction()
{
self.resignFirstResponder()
}
}
Swift-3 버전 (마코의 솔루션 - 나에게 효과가 있음)
(저의 경우, UITextField가 확인되었습니다.)
func addDoneButtonOnKeyboard() {
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 50))
doneToolbar.barStyle = UIBarStyle.default
let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewController.doneButtonAction))
var items = [UIBarButtonItem]()
items.append(flexSpace)
items.append(done)
doneToolbar.items = items
doneToolbar.sizeToFit()
self.textfield.inputAccessoryView = doneToolbar
}
func doneButtonAction() {
self.textfield.resignFirstResponder()
}
완료 단추가 있는 도구 모음을 키보드에 추가할 수 있습니다. InputAccessoryView
텍스트 필드의 속성을 사용하여 이 도구 모음을 설정할 수 있습니다.
아래는 제 경우에 사용한 코드입니다.
//Add done button to numeric pad keyboard
let toolbarDone = UIToolbar.init()
toolbarDone.sizeToFit()
let barBtnDone = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Done,
target: self, action: #selector(VerifyCardViewController.doneButton_Clicked(_:)))
toolbarDone.items = [barBtnDone] // You can even add cancel button too
txtCardDetails3.inputAccessoryView = toolbarDone
제가 찾을 수 있는 가장 간단한 솔루션 - Swift 4.2와 함께 작동합니다 - 이것이 도움이 되기를 바랍니다 :)
extension UITextField {
func addDoneButtonOnKeyboard() {
let keyboardToolbar = UIToolbar()
keyboardToolbar.sizeToFit()
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace,
target: nil, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done,
target: self, action: #selector(resignFirstResponder))
keyboardToolbar.items = [flexibleSpace, doneButton]
self.inputAccessoryView = keyboardToolbar
}
}
그러면 다음에서 수행된 작업을 처리할 수 있습니다.textFieldDidEndEditing
메서드를 위임하거나 확장에 사용자 지정 메서드를 추가하여 선택기에 설정합니다.doneButton
.
만약 당신이Done
버튼은 숫자 패드를 닫는 것으로 되어 있고, 가장 간단한 버전은 전화하는 것입니다.resignFirstResponder
다음과 같은 선택자로서:
UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: textField, action: #selector(UITextField.resignFirstResponder))
이 코드는 iOS9과 Swift 2에서 작동하며, 저는 제 앱에서 사용하고 있습니다.
func addDoneButtonOnNumpad(textField: UITextField) {
let keypadToolbar: UIToolbar = UIToolbar()
// add a done button to the numberpad
keypadToolbar.items=[
UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: textField, action: #selector(UITextField.resignFirstResponder)),
UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)
]
keypadToolbar.sizeToFit()
// add a toolbar with a done button above the number pad
textField.inputAccessoryView = keypadToolbar
}
먼저 기본 키보드에 완료 단추를 추가할 수 있다는 것을 알려드리겠습니다.사실 오늘 저는 이 문제를 겪고 해결했습니다.Ready Made Code는 .swift 클래스에 배치하면 됩니다.저는 Xcode 7을 사용하고 있으며 iPad Retina(ios 9)를 사용하여 테스트하고 있습니다.
어쨌든 여기서 더 이상 이야기하지 않는 것이 코드입니다.
//Creating an outlet for the textfield
@IBOutlet weak var outletTextFieldTime: UITextField!
//Adding the protocol of UITextFieldDelegate
class ReservationClass: UIViewController, UITextFieldDelegate {
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
//Making A toolbar
let keyboardDoneButtonShow = UIToolbar(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height/17))
//Setting the style for the toolbar
keyboardDoneButtonShow.barStyle = UIBarStyle .BlackTranslucent
//Making the done button and calling the textFieldShouldReturn native method for hidding the keyboard.
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: Selector("textFieldShouldReturn:"))
//Calculating the flexible Space.
let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
//Setting the color of the button.
item.tintColor = UIColor .yellowColor()
//Making an object using the button and space for the toolbar
let toolbarButton = [flexSpace,doneButton]
//Adding the object for toolbar to the toolbar itself
keyboardDoneButtonShow.setItems(toolbarButton, animated: false)
//Now adding the complete thing against the desired textfield
outletTextFieldTime.inputAccessoryView = keyboardDoneButtonShow
return true
}
//Function for hidding the keyboard.
func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.endEditing(true)
return false
}
}
해결책을 제시하는 것은...
한 가지 더 말씀드리고 싶은 것은 이것이 제가 최근 프로젝트에 사용한 작업 솔루션이라는 것입니다.이 문제에 대한 해결책이 없어서 이 글을 올렸습니다.약속한 대로 작동 코드 및 설명.
편집:-
좀 더 전문적으로...만약 당신이 위의 코드를 따른다면, 그것은 또한 당신에게 작업 해결책을 제공할 것이지만, 저는 여기서 그것을 좀 더 전문적으로 만들려고 노력하고 있습니다.코드 MOD에 유의하시기 바랍니다.나는 이전에 사용하지 않은 코드를 견적과 함께 남겼습니다.
변경사항...
- 개별 단추 개체 만들기
- 도구 모음으로 설정
- 이전에 만든 도구 모음의 크기 줄이기
FlexSpace 및 NegativeSpace를 사용하여 사용자 정의 버튼을 화면 왼쪽에 배치합니다.
func textFieldShouldBeginEditing(textField: UITextField) -> Bool { let keyboardDoneButtonShow = UIToolbar(frame: CGRectMake(200,200, self.view.frame.size.width,30)) // self.view.frame.size.height/17 keyboardDoneButtonShow.barStyle = UIBarStyle .BlackTranslucent let button: UIButton = UIButton() button.frame = CGRectMake(0, 0, 65, 20) button.setTitle("Done", forState: UIControlState .Normal) button.addTarget(self, action: Selector("textFieldShouldReturn:"), forControlEvents: UIControlEvents .TouchUpInside) button.backgroundColor = UIColor .clearColor() // let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: Selector("textFieldShouldReturn:")) let doneButton: UIBarButtonItem = UIBarButtonItem() doneButton.customView = button let negativeSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) negativeSpace.width = -10.0 let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) //doneButton.tintColor = UIColor .yellowColor() let toolbarButton = [flexSpace,doneButton,negativeSpace] keyboardDoneButtonShow.setItems(toolbarButton, animated: false) outletTextFieldTime.inputAccessoryView = keyboardDoneButtonShow return true }
그것은 이제 나에게 다음과 같은 것을 줍니다.또한 사진과 일치하여 변경 사항을 찾으십시오.
감사해요.
이것이 도움이 되었기를 바랍니다.답변이 길어 죄송합니다.
저는 IQ키보드 매니저 스위프트라는 라이브러리를 사용할 것입니다.
AppDelegates didFinishWithLaunching 메서드에 코드 한 줄을 삽입하면 필요한 모든 기능이 모든 텍스트 필드에 적용됩니다.
import IQKeyboardManagerSwift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
//Following line is all you need and it applies for all TextFields
IQKeyboardManager.shared.enable = true
return true
}
위의 답변은 Xcode 11에서 오래된 것이고 초기 도구 이상이기 때문입니다.바라이크UIToolbar()
여기처럼 실행할 때마다 콘솔에 제약을 줄 테니 사용하십시오.UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
에 신대
샘플코드
let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
toolBar.barStyle = .default
toolBar.sizeToFit()
// Adding Button ToolBar
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(doneButtonTapped))
toolBar.items = [doneButton]
toolBar.isUserInteractionEnabled = true
textField.inputAccessoryView = toolBar
마르코 니콜로브스키의 대답에 따르면,
다음은 목표-C 답입니다.
- (void)ViewDidLoad {
[self addDoneButtonOnKeyboard];
}
- (void)addDoneButtonOnKeyboard {
UIToolbar *toolBarbutton = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
toolBarbutton.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonAction)];
NSMutableArray *items = [[NSMutableArray alloc] init];
[items addObject:barBtnItem];
[items addObject:done];
toolBarbutton.items = items;
[toolBarbutton sizeToFit];
self.timeoutTextField.inputAccessoryView = toolBarbutton;
}
- (void)doneButtonAction {
[self.view endEditing:YES];
}
사용자 정의 클래스를 만들 수 있습니다.Swift 4를 사용합니다.
class UITextFieldWithDoneButton: UITextField {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.addDoneButtonOnKeyboard()
}
fileprivate func addDoneButtonOnKeyboard() {
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
self.inputAccessoryView = doneToolbar
}
@objc fileprivate func doneButtonAction() {
self.resignFirstResponder()
}
}
키보드에서 "DONE" 버튼을 쉽게 추가할 수 있는 방법은 범용 라이브러리를 추가하는 것입니다.
애플리케이션(_응용프로그램)에서 아래 코드를 추가합니다(_ application:UIA 응용 프로그램에서 옵션으로 실행을 마쳤습니다.
IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enableAutoToolbar = true
IQKeyboardManager.shared.keyboardDistanceFromTextField = 15
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
언급URL : https://stackoverflow.com/questions/28338981/how-to-add-done-button-to-numpad-in-ios-using-swift
'programing' 카테고리의 다른 글
Get-WMIObject \Get-Cim 인스턴스는 실제로 무엇을 합니까? (0) | 2023.08.11 |
---|---|
Fill remaining vertical space with CSS using display:flex (0) | 2023.08.11 |
SUM과 SUBTOTAL의 차이점은 무엇입니까? (0) | 2023.08.11 |
spring security httpantMatcher(경로가 여러 개인 경우) (0) | 2023.08.11 |
시스템 오버레이 창 만들기(항상 맨 위에 있음) (0) | 2023.08.11 |