IOS - Tashqi ko'rinishidan biron-bir joyga tegib, qanday ko'rinishni yashirish kerak

Men iOS dasturlash uchun yangi, men tugma bosilganda, tugma usulida quyidagi kodni ishlatib, ko'rinishni namoyish qilaman.

 @IBAction func moreButton(_ sender: Any)
    {
        self.helpView.isHidden = false
    }

dastlabki ko'rinishni yashirish uchun viewDidLoad usulida self.helpView.isHidden to'g'ri rostlangan. Endi, bu ko'rinishni qandaydir joyda biron-bir joyga tegizib qo'yishim mumkin. Tadqiqotdan shuni topdiki, uni butun viewControllerga mos shaffof tugma yaratish orqali amalga oshirish mumkin. Shunday qilib, tugmani bosish orqali, biz uni rad etishimiz mumkin. Bunday tugma yaratish uchun har kim menga 3-sonli kodni berishi mumkin.

Yoki agar ko'rinishni yashirishning yana bir yaxshi usuli bo'lsa, u yoqimli.

Xcode 8.2, swift 3.0 dan foydalanayapman

Oldindan rahmat.

7
O'qishingiz kerak bo'lgan usul yaxshi va oson bo'lishi kerak, shuningdek touchesBegan yozuvini bekor qilishingiz va sensorli ko'rinishning ko'rinish yoki yo'qligini tekshirishingiz yoki uni yashirish uchun teginish o'rnini solishtirishingiz mumkin
qo'shib qo'ydi muallif Tj3n, manba

6 javoblar

Aloqada boshlashingiz kerak

override func touchesBegan(_ touches: Set, withEvent event: UIEvent) {
    var touch: UITouch? = touches.first
    //location is relative to the current view
   //do something with the touched point
    if touch?.view != yourView {
        yourView.isHidden = true
    }
}
20
qo'shib qo'ydi
Tezda 3: touchesBegan (_ teginishlar: Set , hodisa bilan: UIEvent?)
qo'shib qo'ydi muallif Savas Adar, manba
Men aniq masalani bilsam maylimi
qo'shib qo'ydi muallif Lakshmi Keerthana Siddu, manba
Rahmat. Buni amalga oshirishda helpView uni tegizib qo'ymaydi. kutilganidek.
qo'shib qo'ydi muallif Tester, manba
HelpView-ning ushbu ko'rinishdan tashqariga tegib turganda, biz uni o'chirib qo'yishini xohlayman. Ya'ni, bu kod men kutgan kabi ishlaydi degani.
qo'shib qo'ydi muallif Tester, manba

Buning uchun touchesBegan usulidan foydalanishingiz mumkin:

override func touchesBegan(_ touches: Set, with event: UIEvent?) {

    self.helpView.isHidden = true
}
4
qo'shib qo'ydi
Javob uchun rahmat. Ishlamoqda.
qo'shib qo'ydi muallif Tester, manba

Tanlangan moreButton ichida siz shunga o'xshash biror narsa qilishingiz mumkin

 @IBAction func moreButton(_ sender: Any)
    {
        self.helpView.isHidden = false
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissView))
        view.addGestureRecognizer(tap)
    }

    func dismissView() {
        self.helpView.isHidden = true
        self.view.removeGestureRecognizer(tap)
    }
1
qo'shib qo'ydi
Salom. view.view yozib ko'ring. Sizga view = ViewController tayinlangan deb o'ylayman.
qo'shib qo'ydi muallif Clinton D'Souza, manba
Bundan tashqari, funktsiyadan tashqarida "tap" deb e'lon qiling. ni bosing: UITapGestureRecognizer = UITapGestureRecognizer (maqsad: self, action: #selector (UIViewController.dismissView)) va keyin @IBAction func tugmasini yana bir marta qo'ying (_ jo'natuvchi: Any) {self.helpView.isHidden = false view.addGestureRecognizer (tap)}
qo'shib qo'ydi muallif Clinton D'Souza, manba
Javob uchun rahmat. Buni qo'shib, ikkita xatoga yo'l qo'yaman. "Chiziqsiz identifikatordan foydalanish" "va" UIViewController "ning hech qanday a'zosi" dismissView "yo'q". Siz taklif qilgan barcha kodlarni qo'shganimdan aminman. Menda boshqa narsa bormi?
qo'shib qo'ydi muallif Tester, manba
Ishlamoqda. Rahmat @Clinton
qo'shib qo'ydi muallif Tester, manba

Siz yana bir shaffof tugma yaratishingiz mumkin yoki sizning asosiy ko'rinishingiz tugmachaning pastki qismida bitta ko'rinish paydo bo'lishiga qaramay, siz nima qilmoqchi ekanligingizni ko'rib chiqishingiz mumkin. Birinchidan, siz uni tappable qilishingiz kerak. So'ngra siz mantiqqa urilganda nima bo'lganligi haqida gapirishni xohlaysiz.

0
qo'shib qo'ydi

Ushbu usulni 4-tez tezlik bilan ishlatishingiz mumkin.

kirish raqamini uiview ga qo'shishga harakat qiling

override func touchesEnded(_ touches: Set, with event: UIEvent?)
{
    if touches.first?.view?.tag == 10{
        dismiss(animated: true, completion: nil)
        super.touchesEnded(touches , with: event)
    }
}
0
qo'shib qo'ydi

Quyidagilarni bajarishni xohlaganingizga erishishingiz mumkin (Swift 4.1 va Xcode 9.3 bilan testlangan):

class ViewController: UIViewController {

    ...

    private var dismissViewTap: UITapGestureRecognizer?

    override func viewDidLoad() {

        super.viewDidLoad()

        dismissViewTap = UITapGestureRecognizer(target: self, action: #selector(dismissView))

        if let tap = dismissViewTap {

            view.addGestureRecognizer(tap)

        }//if let

    }//viewDidLoad

    @objc private func dismissView() {

        guard let tap = dismissViewTap else {

            return

        }//guard

        guard helpView.isHidden == false else {

            return

        }//guard

        helpView.isHidden = true

        view.removeGestureRecognizer(tap)

    }//dismissView

    ...

}//ViewController

Agar siz jestni taniydigan shaxsni saqlamoqchi bo'lsangiz (ehtimol sizga yordamni bir necha marta ochganingiz uchun) ushbu versiyani o'chirib qo'ying:

...

@objc private func dismissView() {

    guard helpView.isHidden == false else {

        return

    }//guard

    helpView.isHidden = true

}//dismissView

...

Hammasi shu...!

0
qo'shib qo'ydi