使用 UITextField + UIPickerview 时禁用键盘输入

2023-12-04

这个项目也是点击textfield pickerview打开,但是上面显示的数据可以在该部分中输入。我怎样才能将其关闭?所以请看下面我的选择。

view image

如果单击文本字段,我将打开选择器视图:

import UIKit
import NVActivityIndicatorView

struct kategoriData {
    var text : String?
    var id : String?
}

class KonuEkleViewController: UIViewController,UITextFieldDelegate , NVActivityIndicatorViewable , UIPickerViewDataSource , UIPickerViewDelegate{
    @IBOutlet weak var txtBaslik: UITextField!
    @IBOutlet weak var txtYazi: UITextView!
    @IBOutlet weak var txtLink: UITextField!
    @IBOutlet weak var btnKonuAc: UIButton!
    @IBOutlet weak var txtKategoriSecimi: UITextField!

    let size = CGSize(width: 30, height: 30)
    let singleton = Global.sharedGlobal
    let ConnectString = Connect.ConnectInfo
    var kategoriList = [kategoriData]()
    let GirisView = GirisViewController()
    var secilenKategori : String?

    var dbKategoriIsim : String?
    var dbKategoriId:String?

    override func viewDidLoad() {
        super.viewDidLoad()
        txtKategoriSecimi.text = "Kategoriyi Seçiniz"
        KategoriGetir()
        pickerGrafik()
        txtYazi.layer.cornerRadius = 10
        btnKonuAc.layer.cornerRadius = 10

        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(GirisViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)
    }
    func dismissKeyboard() {
        view.endEditing(true)
    }


    @IBAction func btnKonuEkle(_ sender: Any) {
       GirisView.LoadingIcon(tur: 0)
        if txtBaslik.text != "" && txtYazi.text != "" && secilenKategori != nil && txtKategoriSecimi.text != "Kategoriyi Seçiniz"
        {
            KonuEkle(uye: singleton.username, baslik: txtBaslik.text!, mesaj: txtYazi.text, kategori: secilenKategori!, link: txtLink.text!)
        }
        else
        {
            GirisView.Bildiri(baslik: "UYARI", mesaj: "Boş Alanları Doldurunuz", tur: 1)
        }
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0) {
            self.GirisView.LoadingIcon(tur: 1)
        }

    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }
    func KonuEkle(uye:String , baslik:String ,mesaj:String , kategori:String , link:String)
    {
        var request = URLRequest(url: URL(string:ConnectString.conString + "/KonuEkle")!)
        request.httpMethod = "POST"
        var postString = "uye="+uye+"&&baslik="+baslik+"&&mesaj="+mesaj+"&&kategori="+kategori+"&&link="+link
        postString = postString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

            if error != nil
            {
                print("error")
            }

            if let urlContent = data
            {

                do
                {
                    let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                    print(jsonResult)
                    if let gelenDizi = jsonResult as? NSArray
                    {
                        for i in 0..<gelenDizi.count
                        {
                            if let gelenMesaj = (gelenDizi[i] as? NSDictionary)?["mesaj"] as? String
                            {
                                DispatchQueue.main.async {
                                    self.Sonuc(mesaj:gelenMesaj)
                                }

                            }

                        }

                    }


                }
                catch
                {
                    print("server hatası")
                }
            }
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0) {
                self.GirisView.LoadingIcon(tur: 1)
            }
        }
        task.resume()
    }


    func Sonuc(mesaj:String)
    {
        var mesajSonuc = ""
        var mesajBaslik = ""

        if mesaj == "basarili"
        {
            mesajSonuc = "Konu Açıldı"
            mesajBaslik = "Bilgi"
        }
        else
        {
            mesajSonuc = "Bir Hata Oluştu Lütfen Destek Bölümünden Bize Ulaşın"
            mesajBaslik = "Uyarı"
        }

        let appearance = SCLAlertView.SCLAppearance(showCloseButton: false)
        let alert = SCLAlertView(appearance: appearance)
        _ = alert.addButton("Tamam") {

            self.txtLink.text = ""
            self.txtYazi.text = ""
            self.txtBaslik.text = ""
            self.navigationController!.popViewController(animated: true)
        }
        if mesajBaslik == "Bilgi"
        {
        _ = alert.showSuccess(mesajBaslik, subTitle:mesajSonuc)
        }
        else
        {
        _ = alert.showNotice(mesajBaslik, subTitle:mesajSonuc)
        }

    }
        func pickerGrafik()
    {
        let pickerView = UIPickerView()

        pickerView.delegate = self

        txtKategoriSecimi.inputView = pickerView

        let toolBar = UIToolbar(frame: CGRect(x: 0, y: self.view.frame.size.height/6, width: self.view.frame.size.width, height: 40.0))

        toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0)

        toolBar.barStyle = UIBarStyle.blackTranslucent

        toolBar.tintColor = UIColor.white

        toolBar.backgroundColor = UIColor.black


        let defaultButton = UIBarButtonItem(title: "İptal", style: UIBarButtonItemStyle.plain, target: self, action: #selector(KonuEkleViewController.tappedToolBarBtn))

        let doneButton = UIBarButtonItem(title: "Tamam", style: UIBarButtonItemStyle.done, target: self, action: #selector(KonuEkleViewController.donePressed))

        let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil)

        let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width / 3, height: self.view.frame.size.height))

        label.font = UIFont(name: "Helvetica", size: 12)

        label.backgroundColor = UIColor.clear

        label.textColor = UIColor.white

        label.text = "Kategoriyi Seçiniz"

        label.textAlignment = NSTextAlignment.center

        let textBtn = UIBarButtonItem(customView: label)

        toolBar.setItems([defaultButton,flexSpace,textBtn,flexSpace,doneButton], animated: true)

        txtKategoriSecimi.inputAccessoryView = toolBar
    }

    func donePressed(_ sender: UIBarButtonItem) {
        txtKategoriSecimi.resignFirstResponder()
    }

    func tappedToolBarBtn(_ sender: UIBarButtonItem) {

        txtKategoriSecimi.resignFirstResponder()
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return kategoriList.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return kategoriList[row].text
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        txtKategoriSecimi.text = kategoriList[row].text
        secilenKategori = kategoriList[row].id
    }

    func KategoriGetir()
    {
        kategoriList.removeAll()
        //SADECE 1 DEFA EKLENIYOR
        self.kategoriList.append(kategoriData.init(text: "Kategoriyi Seçiniz", id: "1"))
        GirisView.LoadingIcon(tur: 0)
        var request = URLRequest(url: URL(string:ConnectString.conString + "/KategoriGetir")!)
        request.httpMethod = "POST"
        var postString = "tur=1&&kategori="
        postString = postString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

            if error != nil
            {
                print("error")
            }

            if let urlContent = data
            {
                do
                {
                    let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                    print(jsonResult)
                    if let gelenDizi = jsonResult as? NSArray
                    {
                        for i in 0..<gelenDizi.count
                        {

                            if let gelenKategori = (gelenDizi[i] as? NSDictionary)?["kategoriisim"] as? String
                            {
                                self.dbKategoriIsim = gelenKategori
                            }
                            if let gelenId = (gelenDizi[i] as? NSDictionary)?["id"] as? String
                            {
                                self.dbKategoriId = gelenId
                            }
                            self.kategoriList.append(kategoriData.init(text: self.dbKategoriIsim, id: self.dbKategoriId))

                        }

                    }



                }
                catch
                {
                    print("error")
                }
            }
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) {
                self.GirisView.LoadingIcon(tur: 1)
            }
        }
        task.resume()
    }


}

您可以实施UITextFieldDelegate method:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

回来false这样就可以防止手动输入任何字符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 UITextField + UIPickerview 时禁用键盘输入 的相关文章

  • Swift 中的 @autoreleasepool 相当于什么?

    在 Swift 中 我注意到没有 autoreleasepool 构造 尽管 Swift 确实使用了 ARC 在 Swift 中管理自动释放池的正确方法是什么 或者它是否因某种原因被删除 语法如下 autoreleasepool code
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • “EXC_BAD_ACCESS”与“分段错误”。两者实际上相同吗?

    在我的前几个虚拟应用程序 用于学习时练习 中 我遇到了很多EXC BAD ACCESS 这以某种方式告诉我错误访问是 您正在触摸 访问一个不应该的对象 因为它尚未分配或释放 或者只是您无权访问它 查看此示例代码 该代码存在访问错误问题 因为
  • UIAlertAction 处理程序在延迟后运行

    我正在尝试将 UIAlertViews 更改为 UIAlertControllers 我为此设置了这个操作 UIAlertAction undoStopAction UIAlertAction actionWithTitle Undo St
  • 致命错误:在 flutter 中找不到“Flutter/Flutter.h”文件

    这是错误 在文件中包含来自 Users chetan pub cache hosted pub dartlang org webview flutter 1 0 7 ios Classes JavaScriptChannelHandler
  • 解析迁移到 mLabs 和 Heroku 的错误

    我至少一年前将解析数据库迁移到 Mlabs 从那时起我就一直在开发该应用程序 解析仪表板表示我已成功迁移 Mlab 和 Parse 都收到了数据库的更新 然而 在过去一两周内 该应用程序不再经过登录页面 没有调整代码 这是服务器问题 以下是
  • 如何计算CLLocationDistance的中心坐标

    我想计算我的位置和一些注释之间的中心点 到目前为止我已经这样做了 CLLocation myLoc self locMgr location MKPointAnnotation middleAnnotation locationV anno
  • 如何使用呼叫目录扩展来识别应用程序中的来电?

    我正在研究callKit框架 我发现通过使用呼叫目录扩展 我们可以识别来电电话号码 我的问题是如何在 iOS 应用程序中实现呼叫目录扩展来识别来电详细信息 我在 Objective C 工作 让一个数 919876xxxxx 使用此方法添加
  • 在两个可移动 uiview 之间画线

    我有一个带有节点的 滚动视图 UIViews 可以拖动 我正在尝试在选定的之间绘制边缘UIViews使用 calayer 但我不知道当视图位置发生变化时如何重新绘制线条 In my viewControllerI 类在节点数组中添加第一个和
  • 增量后清除推送通知徽章

    我正在研究 iPhone 中的推送通知 当我收到推送通知时 它在我的应用程序图标上显示 1 下次显示 2 3 4 如果我打开应用程序 它是 0 下次它应该是 1 2 3 4 但它显示最后一个数字和 1 我想在打开应用程序后重置推送通知徽章
  • Xcode 中的 NSObject 描述和自定义摘要

    我覆盖对象的 NSString description但是 Xcode 总是显示error summary string parsing error在变量视图的摘要字段中 我当前的实现如下 NSString description retu
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58
  • 使用 UIWebView 显示 PDF 不起作用

    因此 我意识到有关使用 UIWebView 在应用程序 在 iPad 上 中显示 PDF 存在很多问题 我已经审查了我能找到的所有内容 但似乎找不到任何满意的东西 我想做的事情非常基本 所以我真的不知道为什么它不起作用 我需要做的就是在 U
  • 如何在 iOS 6 中强制 UIViewController 为纵向

    As the ShouldAutorotateToInterfaceOrientation在 iOS 6 中已弃用 我用它来强制特定视图仅肖像 在 iOS 6 中执行此操作的正确方法是什么 这仅适用于我的应用程序的一个区域 所有其他视图都可
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI
  • dyld:无法加载插入的库,但可以在模拟器和另一部 iPhone 上使用

    所以我在过去的几个小时里在我的应用程序上编码 在某个时候我决定在我的 iPhone 8 13 3 1 上启动我的应用程序而不是使用模拟器 13 3 它立即崩溃并出现以下错误 dyld warning could not load inser
  • 如何在没有 MFMessageComposeViewController 的情况下发送和接收短信?

    我想发送和接收短信而不显示MFMessageViewController从我的申请中 有人能告诉我这怎么可能吗 不可能 除非您使用第 3 方 api 发送 接收短信
  • 共享扩展程序未出现在能够在 iPhone 上共享照片的应用程序列表中

    我正在尝试创建一个共享应用程序扩展 并按照以下来源的教程进行操作 http www technetexperts com mobile share extension in ios application overview with exa
  • 游戏中心玩家显示名称在沙盒中始终为“我”

    我使用用户的游戏中心显示名称和玩家 ID 来维护他们在我的服务器上的个人资料 当我进行测试时 一切似乎都正确执行 但我的沙箱帐户的用户显示名称显示为 Me 而不是附加到我的帐户的显示名称 Billybobbo 这应该在沙盒模式下发生吗 Co
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代

随机推荐

  • 如何读取 SNMP OID 输出(位)(hrPrinterDetectedErrorState)

    我有一个快速的问题 这很可能是用户错误 所以在开始之前我深表歉意 我正在尝试为设备设置阈值 以便当我们的一台打印机处于某种状态时它会提醒我们 卡纸 碳粉用完 无纸等 我找到了处理此问题的特定 oid 1 3 6 1 2 1 25 3 5 1
  • readthedocs 不从公共 github 存储库创建文档

    我有一个公共 github 存储库 下列的指示在 readthedocs 中 我使用 Sphinx 以我很乐意让其他人看到的形式获取文档 编辑文件并重建 直到您喜欢所看到的内容为止 然后提交更改并推送到公共存储库 一旦您在公共存储库中拥有
  • 我在设置 MvvmCross 6.0 时做错了什么?

    我是 MvvmCross 6 0 和 Xamarin 的新手 我正在尝试遵循这里是 MvvmCrosss 5 5 的教程 我按照解释 创建 App xaml 作为 MvxFormsApplication
  • Google Chrome“后退”和“前进”历史记录

    我正在开发一个名为 的小扩展 标签捆绑器 简而言之 它将窗口中所有打开的选项卡保存到一个捆绑包中 只需单击按钮即可打开该捆绑包 但是 当打开捆绑包时 不会保存用户如何访问该 url 的历史记录 即用户无法点击返回查看他们如何到达该网址 这是
  • 项目级别的 SourceSafe 合并

    我正在运行 SourceSafe 并且我的代码有两个分支 我目前正在使用手动方法运行报告来显示差异 然后手动将每个文件一一合并 不过 我正在尝试找到一种简化的方法来在项目级别上做到这一点 如果该过程一次显示每个文件一个就可以了 我只是担心如
  • 将逗号分隔值拆分到具有固定列数的目标表中

    我在 Postgres 13 1 数据库中有一个包含单列的表 它由许多带有逗号分隔值的行组成 最多大约 20 个元素 我想将数据分成多列 但我的列数有限 例如单行中有 5 个和 5 个以上的 CSV 值 因此多余的值必须转移到新的 下一行
  • React Native:firestore/firebase 预期 collection() 的第一个参数是 CollectionReference...怎么样?

    因此 我有一个简单的 React Native 应用程序 它是我使用 Expo 创建的 并在我的个人 Android 设备上进行调试 我已将 firebase firestore 包含到我的应用程序中 现在尝试在单击按钮时将对象添加到 fi
  • 将 web.config 文件转换为 .htaccess

    我正在寻找一种将 IIS 重写规则转换为 htaccess 文件的方法 我找不到任何工具来自动执行此操作 我所能得到的只是 500 个内部服务器错误 web config 文件如下所示
  • 添加“Authorization”标头会导致 Spring Security 保护允许的端点

    所以 我的里面有这个WebSecurityConfigurerAdapter public class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdap
  • 如果 C# 中的相同位置已存在文件,则始终创建新文件

    我使用下面的代码创建了一个新文件 但如果该文件已经存在 那么我需要使用另一个文件名创建一个新文件 这可能吗 FileStream fs new FileStream filePath FileMode Append FileAccess W
  • 带等高线的 Gnuplot 、 pm3d

    我正在用一些值绘制一个矩阵 3D 并且我需要向图中添加等高线 是否有一个简单的 gnuplot 命令可以做到这一点 我尝试了命令 设置轮廓基础 但只出现了 1 行 我认为应该有很多行 看matlab图片 当我在 gnuplot 中绘制它时
  • R flextable - 如何在合并单元格下添加表宽水平边框

    当合并单元格时 是否有一种聪明的方法可以使水平边框表格变宽 在下面的示例中 它还不是表宽 或者我应该编写一个函数来计算正确的索引 library flextable library officer library dplyr myft lt
  • MySQL 查询查找订购了两种特定产品的客户

    我无法提出一个查询来查找同时购买了 PROD1 和 PROD2 的所有客户 这是一个伪查询 看起来像我想要做的 显然这是行不通的 SELECT COUNT DISTINCT userid FROM TRANSACTIONS WHERE pr
  • javascript - 如何让对象返回一个不是对象本身的值

    当创建一个x new Date 对象 如果你把它放入console log x 将输出一个字符串 有没有办法制作一个自定义对象 该对象将返回一个不是对象本身的不同值 有一个函数可以做到这一点 toString 但是如果你这样做console
  • 为 CakePHP 发送正确的 JSON 内容类型

    在我的 CakePHP 应用程序中 我返回 JSON 并针对某些请求退出 例如 尝试通过 GET 请求访问 API 进行登录 header Content Type application json echo json encode arr
  • Intellij Idea 13 有代码片段编辑器吗?

    Visual Studio 有片段设计师扩展可用于创建和管理自定义代码片段 是否有类似 Intellij Idea 13 的扩展 或者简单添加自定义代码片段的方法 据我所知 没有扩展 而且我不熟悉 Snippet Designer 但 In
  • 将 Guid 表示为一组整数

    如果我想将 guid 表示为一组整数 我将如何处理转换 我正在考虑获取 guid 的字节数组表示形式并将其分解为可以转换回原始 guid 的尽可能少的 32 位整数 首选代码示例 另外 生成的整数数组的长度是多少 由于 GUID 只有 16
  • 安装Python geopandas失败

    我正在尝试安装 geopandas 进行以下设置 Windows 64 Anaconda2 64 位 Python 2 7 尝试过两件事 1 pip install geopandas 这给了我以下错误 WindowsError Error
  • 在Python中使用win32com.client如何查找和替换多个文本

    我正在尝试使用查找和替换来将多个字符串值添加到 Word 文档中win32com客户端Python 库 我可以查找并替换一个值 但我不知道如何对多个值执行此操作 这是我到目前为止所拥有的 import win32com client wor
  • 使用 UITextField + UIPickerview 时禁用键盘输入

    这个项目也是点击textfield pickerview打开 但是上面显示的数据可以在该部分中输入 我怎样才能将其关闭 所以请看下面我的选择 如果单击文本字段 我将打开选择器视图 import UIKit import NVActivity