2010-08-31 51 views
1

我有一些複雜的iOS視圖層次結構。一段文本是可編輯的UITextField。當用戶觸摸它時,它成爲第一響應者,並且是可編輯的。允許在複雜的iPhone UI上完成文本編輯的最佳方式

儘管如此,最好的做法應該是在編輯控件之外的任何位置觸摸它,使其退出第一響應者並結束編輯。完成這個的最好方法是什麼?

技術我已經試過:

  1. 使用exclusiveTouch屬性,它停止與其他控件交互的用戶,但不會導致編輯結束。也禁止用戶與我的工具欄「完成」按鈕進行交互。
  2. 將透視UIView放在文本字段控件下,並放在其他所有內容(工具欄除外)的頂部,然後使用觸摸來結束編輯。這是有效的,但我最終將文本字段重新放置到位於整個層次結構之上的其他隨機視圖中,這意味着我必須在多個地方處理文本字段的佈局,因爲它不再居住在它居住的地方最初,我必須將其所有行爲從其「屏蔽」視圖中來回委託給它的本地容器,它具有所有相關的邏輯。

有沒有一個優雅的解決方案,我錯過了這個問題?我認爲這一定是一個常見的設計問題。

謝謝。

回答

0

在文本視圖周圍平鋪4個「透視」視圖以捕獲/忽略觸摸。不需要修改或「提升」文本視圖,並且可以以相當模塊化的方式添加到父視圖中。

如果不知道面罩會覆蓋哪些面罩以及面罩不能覆蓋哪些區域,則無法掩蓋區域。所以任何解決方案都需要足夠的範圍來收集這兩個邊界。要麼將文本直接向上傳遞,要麼將視圖矩形/區域向下關閉,或者同時傳遞到中間的某個東西。如果不是用於文本視圖的控制器,則用於要被覆蓋的東西的控制器似乎與鞏固這兩個區或區域的任何地方一樣好。

+0

謝謝。啊,但textview被隱藏在我的對象層次結構中,並且不知道整個屏幕的邊界 - 發現這隻會再次圍繞視圖。更有問題的是,文本視圖可能不是整個屏幕區域中的「頂級」子視圖 - 如果不是,那麼在它周圍添加對等視圖並不能保證什麼,對吧? – 2010-08-31 18:32:21

+0

如果不知道該面罩將覆蓋哪些面罩以及該面罩不會覆蓋哪個區域,則無法遮蓋該區域。所以任何解決方案都需要足夠的範圍來收集這兩個邊界。要麼將文本直接向上傳遞,要麼將視圖矩形/區域向下關閉,或者同時傳遞到中間的某個東西。如果不是用於文本視圖的控制器,則用於要被覆蓋的東西的控制器似乎與鞏固這兩個區或區域的任何地方一樣好。 – hotpaw2 2010-09-01 05:56:17

+0

感謝您的討論。我已經將你的洞察力跟進到你的實際答案中。 – 2010-09-03 17:16:53

0

如果您將基本視圖更改爲UIControl,則可以將IBAction添加到該圖層,以將文本字段作爲第一響應者。

此外,如果您有多個觸摸事件,請確保每個觸摸事件都是becomeFirstResponder

我很想有一些更詳細的資格我解釋由xD

0

問題的要點是什麼構成「最佳實踐」。除非用戶解散它,否則鍵盤仍然是故意的。例如,許多應用程序需要用戶在仍然在文本字段中工作時才能點擊按鈕。

鍵盤有一個返回按鈕。 「最佳做法」是響應用戶點擊該按鈕而退出第一響應者。否則,你應該把鍵盤留在那裏,因爲這是用戶期望的。但是,如果你堅持按照你的方式做,就有一個簡單的解決方案:在背景視圖中放置一個UITapGestureRecognizer。如果用戶在界面上點擊背景或任何按鈕或類似按鈕,則會觸發其處理程序。因此,假設您已經記錄了第一響應者的情況,您可以將resignFirstResponder發送給輕擊手勢識別器處理程序中的第一響應者。

相關問題