swift 键盘上添加搜索 - CSDN
  • MacOS上键盘/鼠标控制应用的Swift语言开发笔记 背景 继续在做小gadget,先学习基本操作。 这次需要实现的功能是程序控制键盘和鼠标,也就是人不需要碰键盘鼠标而键盘自动输入,鼠标自动移动点击的功能。 网上...

    MacOS上键盘/鼠标控制应用的Swift语言开发笔记

    背景

    继续在做小gadget,先学习基本操作。
    这次需要实现的功能是程序控制键盘和鼠标,也就是人不需要碰键盘鼠标而键盘自动输入,鼠标自动移动点击的功能。

    网上搜索了一下,Objective-C的实现例子倒是不少,可是基本找不到太多讲swift上面实现的例子,无奈自行摸索,在此总结一下。

    准备

    本功能应该属于Accessibility(辅助功能)的范畴,测试需要给予Xcode相应的操作权限。
    打开【系统编好设置】,【安全性与隐私】,【隐私】里面勾选Xcode前面的方框。如果看不到Xcode的话手动添加。

    库和官方文件

    需要用到Core Graphics里面的
    * Quartz Event Services | Apple Developer Documentation
    * Quartz Display Services | Apple Developer Documentation

    按键事件控制键盘

    首先定义所需要的按键事件,然后通过post方法让系统执行事件。
    每一次按键需要先按下再离开,通过函数分别定义这两个操作。

    属性方面:

    • 这里的CGEventSourceStateID看了一下官方文件,分privateState,combinedSessionState和hidSystemState三种,这里选择最后一个,一般source定义为nil也可以。
    • virtualKey后面是需要的按键的代码,mac的英语键盘的话参考文末的一览表。
    • keyDown当然true是按下,false是松开了
    • tap后面是按键时候的鼠标位置
    //按下按键
    func keyboardKeyDown(key: CGKeyCode) {
    
            let source = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)
            let event = CGEvent(keyboardEventSource: source, virtualKey: key, keyDown: true) 
            event?.post(tap: CGEventTapLocation.cghidEventTap)
            print("key \(key) is down")
        }
    
    //松开按键    
    func keyboardKeyUp(key: CGKeyCode) {
            let source = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)
            let event = CGEvent(keyboardEventSource: source, virtualKey: key, keyDown: false)
            event?.post(tap: CGEventTapLocation.cghidEventTap)
            print("key \(key) is released")
        }

    按键例子

    比如说需要按下F5的话,调用上面两个函数就可以

    keyboardKeyDown(key: 0x60) //0x60是F5功能键代码
    keyboardKeyUp(key: 0x60)

    Command+C怎么办?

    这时候加入CGEventFlags - Core Graphics | Apple Developer Documentation

    let cmd_c_D = CGEventCreateKeyboardEvent(nil, 0x08, true); //0x08是C键代码 cmd-c down
    CGEventSetFlags(cmd_c_D, CGEventFlags.MaskCommand);
    CGEventPost(CGEventTapLocation.CGHIDEventTap, cmd-c-D);
    
    let cmd_c_U = CGEventCreateKeyboardEvent(nil, 0x08, false); // cmd-c up
    CGEventSetFlags(cmd_c_U, CGEventFlags.MaskCommand);
    CGEventPost(CGEventTapLocation.CGHIDEventTap, cmd_c_U);

    shift,control等都有相应的CGEventSetFlags

    鼠标控制

    鼠标控制注意

    • 移动鼠标和显示移动后的鼠标是不同的事件操作。
    • 还有注意显示器的坐标轴原点不是左上角,而是左下角。留意别搞错y轴的方向了。

    移动点击鼠标事件

    // 鼠标左键按下
    guard let mouseDown = CGEvent(mouseEventSource: nil,
                            mouseType: .leftMouseDown,
                            mouseCursorPosition: CGPoint(x: 200, y: 300),
                            mouseButton: .left
                            ) else {return}
    mouseDown?.post(tap: .cghidEventTap)
    
    // 鼠标左键抬起
    guard let mouseUp = CGEvent(mouseEventSource: nil,
                          mouseType: .leftMouseUp,
                          mouseCursorPosition: CGPoint(x: 200, y: 300),
                          mouseButton: .left
                          ) else {return}
    mouseUp?.post(tap: .cghidEventTap)

    属性一览表:CGEventType - Core Graphics | Apple Developer Documentation

    只移动鼠标

    guard let moveEvent = CGEvent(mouseEventSource: nil, mouseType: .mouseMoved, 
                          mouseCursorPosition: point, mouseButton: .left 
                          ) else {return}
    moveEvent?.post(tap: .cghidEventTap)

    移动屏幕上面的鼠标图标

    利用上面的事件移动鼠标之后,屏幕上的鼠标图标是不动的。需要再用下面操作才能看到鼠标的图标在屏幕上面移动了。

    func CGDisplayMoveCursorToPoint(_ display: CGDirectDisplayID, 
                                  _ point: CGPoint) -> CGError

    完整的鼠标移动函数

    func moveMouse(_ dx:CGFloat , _ dy:CGFloat){
      //先监控移动前鼠标位置
      var mouseLoc = NSEvent.mouseLocation  
      mouseLoc.y = NSHeight(NSScreen.screens[0].frame) - mouseLoc.y;
      //计算鼠标新位置
      let newLoc = CGPoint(x: mouseLoc.x-CGFloat(dx), y: mouseLoc.y+CGFloat(dy)) 
      print("moving \(dx) \(dy)")
      CGDisplayMoveCursorToPoint(0, newLoc)
        }

    其他先留坑

    附录

    MouseType类型

    /* Constants that specify the different types of input events. */
    public enum CGEventType : UInt32 {
    
    
        /* The null event. */
        case null
    
    
        /* Mouse events. */
        case leftMouseDown
    
        case leftMouseUp
    
        case rightMouseDown
    
        case rightMouseUp
    
        case mouseMoved
    
        case leftMouseDragged
    
        case rightMouseDragged
    
    
        /* Keyboard events. */
        case keyDown
    
        case keyUp
    
        case flagsChanged
    
    
        /* Specialized control devices. */
        case scrollWheel
    
        case tabletPointer
    
        case tabletProximity
    
        case otherMouseDown
    
        case otherMouseUp
    
        case otherMouseDragged
    
    
        /* Out of band event types. These are delivered to the event tap callback
           to notify it of unusual conditions that disable the event tap. */
        case tapDisabledByTimeout
    
        case tapDisabledByUserInput
    }

    Mac的键盘代码一览

    /*
     *  Summary:
     *    Virtual keycodes
     *  
     *  Discussion:
     *    These constants are the virtual keycodes defined originally in
     *    Inside Mac Volume V, pg. V-191. They identify physical keys on a
     *    keyboard. Those constants with "ANSI" in the name are labeled
     *    according to the key position on an ANSI-standard US keyboard.
     *    For example, kVK_ANSI_A indicates the virtual keycode for the key
     *    with the letter 'A' in the US keyboard layout. Other keyboard
     *    layouts may have the 'A' key label on a different physical key;
     *    in this case, pressing 'A' will generate a different virtual
     *    keycode.
     */
    enum {
      kVK_ANSI_A                    = 0x00,
      kVK_ANSI_S                    = 0x01,
      kVK_ANSI_D                    = 0x02,
      kVK_ANSI_F                    = 0x03,
      kVK_ANSI_H                    = 0x04,
      kVK_ANSI_G                    = 0x05,
      kVK_ANSI_Z                    = 0x06,
      kVK_ANSI_X                    = 0x07,
      kVK_ANSI_C                    = 0x08,
      kVK_ANSI_V                    = 0x09,
      kVK_ANSI_B                    = 0x0B,
      kVK_ANSI_Q                    = 0x0C,
      kVK_ANSI_W                    = 0x0D,
      kVK_ANSI_E                    = 0x0E,
      kVK_ANSI_R                    = 0x0F,
      kVK_ANSI_Y                    = 0x10,
      kVK_ANSI_T                    = 0x11,
      kVK_ANSI_1                    = 0x12,
      kVK_ANSI_2                    = 0x13,
      kVK_ANSI_3                    = 0x14,
      kVK_ANSI_4                    = 0x15,
      kVK_ANSI_6                    = 0x16,
      kVK_ANSI_5                    = 0x17,
      kVK_ANSI_Equal                = 0x18,
      kVK_ANSI_9                    = 0x19,
      kVK_ANSI_7                    = 0x1A,
      kVK_ANSI_Minus                = 0x1B,
      kVK_ANSI_8                    = 0x1C,
      kVK_ANSI_0                    = 0x1D,
      kVK_ANSI_RightBracket         = 0x1E,
      kVK_ANSI_O                    = 0x1F,
      kVK_ANSI_U                    = 0x20,
      kVK_ANSI_LeftBracket          = 0x21,
      kVK_ANSI_I                    = 0x22,
      kVK_ANSI_P                    = 0x23,
      kVK_ANSI_L                    = 0x25,
      kVK_ANSI_J                    = 0x26,
      kVK_ANSI_Quote                = 0x27,
      kVK_ANSI_K                    = 0x28,
      kVK_ANSI_Semicolon            = 0x29,
      kVK_ANSI_Backslash            = 0x2A,
      kVK_ANSI_Comma                = 0x2B,
      kVK_ANSI_Slash                = 0x2C,
      kVK_ANSI_N                    = 0x2D,
      kVK_ANSI_M                    = 0x2E,
      kVK_ANSI_Period               = 0x2F,
      kVK_ANSI_Grave                = 0x32,
      kVK_ANSI_KeypadDecimal        = 0x41,
      kVK_ANSI_KeypadMultiply       = 0x43,
      kVK_ANSI_KeypadPlus           = 0x45,
      kVK_ANSI_KeypadClear          = 0x47,
      kVK_ANSI_KeypadDivide         = 0x4B,
      kVK_ANSI_KeypadEnter          = 0x4C,
      kVK_ANSI_KeypadMinus          = 0x4E,
      kVK_ANSI_KeypadEquals         = 0x51,
      kVK_ANSI_Keypad0              = 0x52,
      kVK_ANSI_Keypad1              = 0x53,
      kVK_ANSI_Keypad2              = 0x54,
      kVK_ANSI_Keypad3              = 0x55,
      kVK_ANSI_Keypad4              = 0x56,
      kVK_ANSI_Keypad5              = 0x57,
      kVK_ANSI_Keypad6              = 0x58,
      kVK_ANSI_Keypad7              = 0x59,
      kVK_ANSI_Keypad8              = 0x5B,
      kVK_ANSI_Keypad9              = 0x5C
    };
    
    /* keycodes for keys that are independent of keyboard layout*/
    enum {
      kVK_Return                    = 0x24,
      kVK_Tab                       = 0x30,
      kVK_Space                     = 0x31,
      kVK_Delete                    = 0x33,
      kVK_Escape                    = 0x35,
      kVK_Command                   = 0x37,
      kVK_Shift                     = 0x38,
      kVK_CapsLock                  = 0x39,
      kVK_Option                    = 0x3A,
      kVK_Control                   = 0x3B,
      kVK_RightShift                = 0x3C,
      kVK_RightOption               = 0x3D,
      kVK_RightControl              = 0x3E,
      kVK_Function                  = 0x3F,
      kVK_F17                       = 0x40,
      kVK_VolumeUp                  = 0x48,
      kVK_VolumeDown                = 0x49,
      kVK_Mute                      = 0x4A,
      kVK_F18                       = 0x4F,
      kVK_F19                       = 0x50,
      kVK_F20                       = 0x5A,
      kVK_F5                        = 0x60,
      kVK_F6                        = 0x61,
      kVK_F7                        = 0x62,
      kVK_F3                        = 0x63,
      kVK_F8                        = 0x64,
      kVK_F9                        = 0x65,
      kVK_F11                       = 0x67,
      kVK_F13                       = 0x69,
      kVK_F16                       = 0x6A,
      kVK_F14                       = 0x6B,
      kVK_F10                       = 0x6D,
      kVK_F12                       = 0x6F,
      kVK_F15                       = 0x71,
      kVK_Help                      = 0x72,
      kVK_Home                      = 0x73,
      kVK_PageUp                    = 0x74,
      kVK_ForwardDelete             = 0x75,
      kVK_F4                        = 0x76,
      kVK_End                       = 0x77,
      kVK_F2                        = 0x78,
      kVK_PageDown                  = 0x79,
      kVK_F1                        = 0x7A,
      kVK_LeftArrow                 = 0x7B,
      kVK_RightArrow                = 0x7C,
      kVK_DownArrow                 = 0x7D,
      kVK_UpArrow                   = 0x7E
    };

    参考和其他注意事项:

    let opts = NSDictionary(object: kCFBooleanTrue,
                            forKey: kAXTrustedCheckOptionPrompt.takeUnretainedValue() as NSString
                            ) as CFDictionary
    
    guard AXIsProcessTrustedWithOptions(opts) == true else { return }

    վ HᴗP ի

    展开全文
  • UITextField ios键盘(搜索按钮)

    万次阅读 2016-08-15 22:15:10
    ios键盘(搜索按钮)//键盘右下角 //枚举 typedef NS_ENUM(NSInteger, UIReturnKeyType) { UIReturnKeyDefault, //默认:灰色按钮,标有Return UIReturnKeyGo, //标有Go的蓝色按钮 UIReturnKeyGoogle,

    ios键盘(搜索按钮)

    //键盘右下角  
    
    //枚举
    typedef NS_ENUM(NSInteger, UIReturnKeyType) {
        UIReturnKeyDefault,             //默认:灰色按钮,标有Return
        UIReturnKeyGo,                  //标有Go的蓝色按钮
        UIReturnKeyGoogle,              //标有Google的蓝色按钮,用于搜索
        UIReturnKeyJoin,                //标有Join的蓝色按钮
        UIReturnKeyNext,                //标有Next的蓝色按钮 
        UIReturnKeyRoute,               //标有Route的蓝色按钮 
        UIReturnKeySearch,              //标有Search的蓝色按钮
        UIReturnKeySend,                //标有Send的蓝色按钮
        UIReturnKeyYahoo,               //标有Yahoo!的蓝色按钮,用于搜索
        UIReturnKeyDone,                //标有Done的蓝色按钮
        UIReturnKeyEmergencyCall,       //紧急呼叫按钮
        UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
    };
    
    //用法用例:  
    xxx.returnKeyType = UIReturnKeyGo;  

    这个时候你发现按钮不管用
    那么我们该看看代理到底有什么方法

    //UITextFieldDelegate  
    - (BOOL)textFieldShouldReturn:(UITextField *)textField;  

    类似这个方法 就可以加处理了


    修改时间

    2016年08月15日22:14:38

    展开全文
  • 本文在原文的基础,实现swift3.0

    原文:http://www.jianshu.com/p/ef140dfb6825

    本文在原文的基础上,实现swift3.0

    1.在storyboard里面拖入一个 Search Bar 和 一个 tableView。


    import UIKit


    class ViewController: UIViewController,UISearchBarDelegate,UITableViewDelegate,UITableViewDataSource{

        @IBOutlet weak var searchBar: UISearchBar!
        @IBOutlet weak var tableView: UITableView!
        
        let array = ["beijing", "shanghai","guangzhou","shenzhen" ,"changsha","wuhan","tianjing","hangzhou"]
        var result = [String]()
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 搜索内容为空时,显示全部内容
            self.result = self.array
            self.searchBar.delegate = self
            self.tableView.delegate = self
            self.tableView.dataSource = self
            
            self.searchBar.placeholder = "搜索"
            
            
            // 注册tableviewCell
            
            self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")


        }
        
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            
            print("[ViewController searchBar] searchText: \(searchText)")
            
            // 没有搜索内容时显示全部内容
            if searchText == "" {
                self.result = self.array
            } else {
                
                // 匹配用户输入的前缀,不区分大小写
                self.result = []
                
                for arr in self.array {
                    
                    if arr.lowercased().hasPrefix(searchText.lowercased()) {
                        self.result.append(arr)
                    }
                }
            }
            
            // 刷新tableView 数据显示
            self.tableView.reloadData()
        }
        
        // 搜索触发事件,点击虚拟键盘上的search按钮时触发此方法
        func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
            
            searchBar.resignFirstResponder()
        }
        
        // 书签按钮触发事件
        func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) {
            
            print("搜索历史")
        }
        
        // 取消按钮触发事件
        
        func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
            // 搜索内容置空
            searchBar.text = ""
            self.result = self.array
            self.tableView.reloadData()
        }

        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.result.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let identify: String = "cell"
            
            let cell = tableView.dequeueReusableCell(withIdentifier: identify, for: indexPath) as UITableViewCell
            cell.accessoryType = UITableViewCellAccessoryType.disclosureIndicator
            cell.textLabel?.text = self.result[indexPath.row]
            
            return cell
        }
        
        func searchBarSearchButtonClicked() {
            print("7 searchBarSearchButtonClicked")
            
            searchBar.endEditing(true)
        }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }


    }




    展开全文
  • ios键盘控制 By Swift

    2016-01-08 19:40:52
    ios键盘控制 By Swift 协议控制键盘消失 输入框事件控制键盘消失 将view改成UIcontrol触发键盘消失 在输入框下添加Button来点击触发键盘消失 自定义UIView或者子类来获取触摸范围控制键盘隐藏1.协议控制键盘消失 以...

    ios键盘控制 By Swift


    • 协议控制键盘消失
    • 输入框事件控制键盘消失
    • 将view改成UIcontrol触发键盘消失
    • 在输入框下添加Button来点击触发键盘消失
    • 自定义UIView或者子类来获取触摸范围控制键盘隐藏


      1.协议控制键盘消失
      以UItextField为例

    • 当UITextField处于first responder状态,用户点击UITextField可以触发键盘出现
    • 通过协议取消键盘通常做法是继承UITextFieldDelegate,注意: 我们使用协议之后一定不要忘记遵守协议,例如我们定义了一个someTextField , someTextField.delegate = self。
    • 实现的方法,在方法textFieldShouldReturn(textField: UITextField)->Bool实现的代码。
      someTextField.resignFirstResponder()
    • 在弹出的键盘上按键盘右下角的按钮后,就可以使键盘消失,一般这个按钮为完成,搜索等

      2.输入框事件控制键盘消失
      可以给someTextField添加事件
      someTextField.addTarget(self, action: "CancelKey", forControlEvents: UIControlEvents.EditingDidEndOnExit)
      故事版可以直接设置UIText field的事件为 Did End On Exit
      关于action(CancelKey)
      我们必须要实现这个方法,可以只是定义一个空方法,但是不能不能不写,否则会导致程序崩溃。 func Cancelkey(){}
      3.将view改成UIcontrol触发键盘消失
      故事版上我们可以将viewController的默认view改成UIcontrol类型,然后添加事件例如CancelAction
      @IBAction func CancelAction(sender: AnyObject){
      someTextField.resignFirstResponder()
      }

      4.在输入框下添加Button来点击触发键盘消失
      这个跟上一个有点类似,我们添加一个button按钮用来取消键盘,可以添加到self.view上,然后我们写一个触发事件,类似于上一个的方法
      5.自定义UIView或者子类来获取触摸范围控制键盘隐藏
      我们定义一个view或者view的子类,重写方法
      pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool/// 根据手指点击的位置是否在我们输入框上,如果不是的,我们取消弹出的键盘,否者我们不做处理
      该方法实现,需要将输入的控件添加到自定义的view及子类上,由于要实现以下的方法。当然你也可以通过直接传递textfield到该类中,好处是可以不需要将输入控件直接添加到自定义view上,但是这样使得代码耦合度较高,不推荐。
      func didAddSubview(subview: UIView){}///在该方法中获取textField来控制键盘的出现和消失
      demo地址

    展开全文
  • swift4--searchBar搜索

    千次阅读 2018-09-10 19:41:54
    1.在storyboard里面拖入一个 Search Bar...// searchViewController.swift import UIKit class searchViewController: UIViewController , UISearchBarDelegate { @IBAction func closeButtonClick(_ sender: ...
  • 首先需要说明,第三方的键盘管理工具,IQKeyboardManager 无法应用到 UISearchBar 中。要让 IQKeyboardManager 能够应用到 UISearchBar ,你需要修改 IQUIView+Hierarchy.m 的 - (void)isSearchBarTextField 方法...
  • 1,搜索条Options属性还可设置如下功能样式: Shows Search Results Button:勾选后,搜索框右边显示一个圆形向下的按钮,单击会发送特殊事件。 Shows Bookmarks Button:勾选后,搜索框右边会显示一个书本的按钮...
  • 在ios开发中,为了方便,我们经常使用UITableViewcontroller,比如搜索界面为了方便可能更多的使用UITableViewcontroller,那么问题就来了,当我点击搜索框的时候会弹出一个键盘,我们需要点击空白处就隐藏键盘,这...
  • iOS 解决键盘被遮挡的方法

    千次阅读 2014-03-14 09:46:28
     有的解决方案是将视图的所有的东西都添加到一个滚动视图对象( UIScrollView )中,然后滚动视图实现输入框不被软键盘覆盖,个人觉得此方案好是好,但是太过麻烦。  有的解决方案是通过一个通知 ...
  • GitHub上Swift开源项目!

    万次阅读 2017-02-04 19:10:16
    swift-open-project这里汇集了目前为止最为流行的Swift开源项目,选取SwiftGuide中的开源部分,这里将每周对项目进行总结,如果大家有推荐的可以联系thinkloki@gmail.com,或者issues,欢迎Star、Fork。感谢...
  • iOS开发自定义键盘回车键Return Key

    万次阅读 2015-10-06 16:26:45
    在iOS开发中,用户在进行文本输入的时候,往往会用到虚拟键盘上的回车键,也就是Return Key.回车键有时候可以是“完成”(表示输入结束),可以是“下一项”(连续信息输入),可以是“搜索”(网页中输入),可以是...
  • 本系列是Swift官方入门教程的翻译版,含源码,欢迎一起学习Swift
  • 想找一个简单版本较新的IOS开发教程都很难:(1)现在找的很多都是object-C的,不是swift的,(2)老版与最新版本swift中很多语法也不适配,(3)Xcode版本和用法也不一样。 因此,今天自己写一个最简单的教程,用于...
  • Swift 添加动态库——cocoapod

    千次阅读 2016-09-14 11:17:58
    标签: 虽然网上关于CocoaPods安装教程多不胜数,但是我在安装的过程中还是出现了很多错误,所以大家可以照下来步骤装一下,我相信会很好用. 前言 ...在iOS项目中使用第三方类库可以说是非常常见的事,但是要正确地...
  • iOS wkwebview 弹出键盘

    千次阅读 2017-08-02 17:23:57
    在代码中添加以下C的函数: static void (*originalIMP)(id self, SEL _cmd, void* arg0, BOOL arg1, BOOL arg2, id arg3) = NULL; void interceptIMP (id self, SEL _cmd, void* arg0, BOOL arg1, BOOL arg2, id ...
  • SWIFT实现图文混排

    千次阅读 2016-10-08 14:31:47
    在网上搜索图文混排的帖子,有好多。。大多用的第三框架,但是swift实现图文混排的帖子还真不多,我在这里和大家一起梳理一下。希望彼此都能有所帮助, 废话不多说,进入正题: 首先我们都知道,图文混排主要是用...
  • UI小姐姐设计的搜索框经常是五花八门,系统的搜索框经常不能满足我们的需求,需要我们特别定制一个。但是UITextField的诸多回调里面,没有一个是适合触发搜索时间的。 UITextFieldTextDidChangeNotification调用过于...
  • iOS : UISearchBar使用大全,属性、方法大全
  • CYC-UISearchBar 点击空白回收键盘

    千次阅读 2015-11-04 20:31:25
    ios--系统发出的通知--键盘通知// 监听键盘将要显示的通知 如果要显示 那么用keyboardWillShow来响应// 使用时注意 当这个页面消失的时候 立马移除所有监听[[NSNotificationCenterdefaultCenter] addObserver:self ...
  • 1,文本框的创建,有如下几个样式: UITextBorderStyle.None:无边框 UITextBorderStyle.Line:直线边框 UITextBorderStyle.RoundedRect:圆角矩形边框 UITextBorderStyle.Bezel:边线+阴影 ...
1 2 3 4 5 ... 20
收藏数 1,393
精华内容 557
热门标签
关键字:

swift 键盘上添加搜索