Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)
Posted
技术标签:
【中文标题】Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)【英文标题】:Swift: get text of TextView inside TableView (two approaches possible) 【发布时间】:2019-07-21 13:29:04 【问题描述】:我有一个 TableView,里面有可编辑的 TextView,我想在用户尝试移动到下一页时检查它们是否包含文本。但是我不确定如何从 TableView 中引用它们。有什么想法吗?
这是我的设置:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "ActionCell", for: indexPath) as! StepCell
// Cell Formatting
cell.label.delegate = self
cell.delegate = self
return cell
然后是 textview 委托的扩展:
extension Step3: UITextViewDelegate
func textViewDidChange(_ textView: UITextView)
let cell = textView.superview?.superview as? StepCell
let indexPath = tableview.indexPath(for: cell!)
goals[goals.count - 1].steps![indexPath!.row].title = textView.text
resizeTableViewCell()
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
if text == "\n" || text == "\t"
textView.resignFirstResponder()
return false
return true
在我的视图控制器中,如果所有字段都有文本,则该按钮将前进到下一页。
每当创建 Goal 对象时,每个步骤都会添加空文本,因此我考虑检查数组以查看对象是否有任何文本,但这是另一个数组中的数组,我无法得到去工作。我尝试了类似下面的方法,但我收到一条错误消息,提示 Type 'Goal' does not conform to protocol 'Sequence'
@IBAction func nextTU(_ sender: Any)
for steps in goals[0]
print(steps.steps)
如果它很重要,下面是添加步骤的代码:
@IBAction func addTU(_ sender: Any)
goals[goals.count - 1].steps?.append(Step(title: ""))
Goals 的结构如下所示:
struct Goal: Codable, Equatable
var title: String
var description: String?
var duration: String
var steps: [Step]?
var completedSteps: [Step]?
var completed: Bool
var dateCreated: Date
func returnYear(date: Date) -> Int
let calendar = Calendar.current
return calendar.component(.year, from: date)
Step 就是这样的:
struct Step: Codable, Equatable
var title: String
所以回顾一下,我要么需要检查 TableView 中所有 textView 的文本,要么需要遍历数组中的数组。
有什么想法吗?
谢谢
【问题讨论】:
你有很多部分还是只有1个 tableview 中只有一个部分,但用户可以添加任意数量的行。 【参考方案1】:goals[0]
是 Goal
类型的对象,你不能遍历它,你需要
@IBAction func nextTU(_ sender: Any)
for step in goals.last!.steps
if step.text == ""
// alert user
或
goals.last?.steps!.forEach
if $0.title == ""
print("I'm empty!")
上面你应该使用goals.last!.steps
,因为这里goals[goals.count - 1]
你将所有值设置为数组中的最后一项
【讨论】:
谢谢,但返回错误提示:键入“[步骤]?”不符合协议“Sequence”,仅将 Sequence 添加到 Step 不足以使其符合。知道为什么会这样说或如何解决吗? 我已将 Step 和 Goal 添加到原始问题中。 嘿@Sh_Khan,我设法让它工作了。事实证明,如果我使用 forEach 而不是 for in 循环,它将起作用。如果你想更新你的答案,我会接受。目标.last?.steps!.forEach step in if step.title == "" print("I'm empty!")以上是关于Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)
如何在 Swift 2.0 中的 TableView 中获取选中标记的项目
IOS swift如何在标签点击时在TableView中获取标签文本