有没有办法让“强制”键盘在iOS Swift中以编程方式解散?

时间:2018-04-27 12:09:23

标签: ios swift keyboard dismiss

我有一个viewController EditMessage,它有两个UITextFields(UITextView),它们使用键盘,效果很好。这部分是基本的标准内容。当显示键盘时,我为整个view注册了标记手势,这样如果用户点击其他任何地方,我就会关闭键盘:

 self.view.addGestureRecognizer(UITapGestureRecognizer(target: self,
         action: #selector(dismissKeyboard)))

在dismissKeyboard中,一切正常:

@objc func dismissKeyboard(sender: Any) {
    self.view.endEditing(true)
}

但是,我在同一个EditMessage视图中有一个菜单按钮(缩略图)作为子视图控制器(UIViewController)实现,它通过UIApplication.shared.keyWindow()劫持屏幕以显示覆盖和菜单屏幕的底部。使用 Brian Voong的 YouTube频道中的模型/代码构建,从底部复制菜单中的YouTube风格幻灯片。但是,键盘挡路了。由于孩子是一个不同的视图控制器“endEditing”不起作用(或者我可能引用了错误的视图?)。

class ButtonPickerController : UIViewController, 
UIGestureRecognizerDelegate, UINavigationControllerDelegate {

var maxSize = CGFloat(60)

let thumbnail: UIImageView = {
    let thumbnail = UIImageView()
    thumbnail.backgroundColor = UIColor.lightGray
    return thumbnail
}()

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(self.buttonTapped(sender:)))
    tap.delegate = self
    view.addGestureRecognizer(tap)
    //view.backgroundColor = .yellow
    view.contentMode = .scaleAspectFit
    thumbnail.frame = CGRect(x: 0, y: 0, width: self.maxSize, height: self.maxSize)
    setupSubviews()
}

有人能指出我的方向吗?这是我的第一个问题,希望我能正确地提出这个问题。

2 个答案:

答案 0 :(得分:1)

我最终想通了。感谢您的帮助。在我的子视图控制器中,我在点击按钮时使用了以下语句:

{{1}}

答案 1 :(得分:0)

首先,它不是将叠加层显示为viewDidLoad的好方法。

但是一个解决方案是好的,在调用Segue之前给第二个viewcontroller引用第一个。你使用prepare吗?所以在UITapGestureRecognizer中将是正确的地方。在第二个viewcontroller中,您为第一个创建属性,然后在创建import csv import argparse import os, sys from django.core.files import File from django.core.management.base import BaseCommand from django.utils import timezone from django.conf import settings from custom_photo.models import CustomPhoto, CustomPhotoPlate, CustomPhotoType class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument('--csv', nargs='?', type=argparse.FileType('r')) def handle(self, *args, **options): path = os.path.dirname(os.path.realpath(options['csv'].name)) with options['csv'] as csvfile: readCSV = csv.reader(csvfile, delimiter=',') for row in readCSV: photo_path = '%s/%s' %(path, row[0]) with open(photo_path, 'rb') as f: django_file = File(f) photo = CustomPhoto() photo.title=row[1] photo.file = django_file photo.save() print(photo.__dict__) 时将此属性用作目标。

另一种方法是使用协议和委托。