在 iOS 中实现 - 带有自定义标记器的 Android MultiAutoCompleteTextView,如 Whatsapp [附加图片]
Posted
技术标签:
【中文标题】在 iOS 中实现 - 带有自定义标记器的 Android MultiAutoCompleteTextView,如 Whatsapp [附加图片]【英文标题】:Implement in iOS - Android MultiAutoCompleteTextView with custom tokenizer as in Whatsapp [image attached] 【发布时间】:2016-11-07 12:52:15 【问题描述】:当您打开群组并输入 @ 时,我想为 @ 创建自定义标记器,就像在 WhatsApp 功能中一样,然后会弹出一个显示朋友列表的窗口,您可以从中选择一个列表。
我想展示这样的东西:
【问题讨论】:
这个问题已经被问到这里的“android”***.com/questions/40460997/… 使用textField委托方法shouldChangeCharactersInRange
和tableView
,检测@出现时的每个字符显示tableView
和列表。
【参考方案1】:
我之前做过的一些演示代码练习。
Demo Slide Up Like @
Github post
希望这会对你有所帮助。
import UIKit
class ViewController: UIViewController
@IBOutlet var txtSearch : UITextField!
@IBOutlet var tblUserData : UITableView!
var myArrayOfDict: NSMutableArray = []
override func viewDidLoad()
super.viewDidLoad()
myArrayOfDict = [["UserName": "Hasya", "UserID": "1", "UserImage": "1.png"],["UserName": "Demo", "UserID": "2", "UserImage": "2.png"],["UserName": "Hasya & Hasya", "UserID": "3", "UserImage": "3.png"],["UserName": "Demo User", "UserID": "4", "UserImage": "4.png"]]
tblUserData.layer.borderColor = UIColor.blueColor().CGColor
tblUserData.layer.borderWidth = 1.0
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return myArrayOfDict.count
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell : CustomCell! = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell
cell.imgUser.layer.cornerRadius = cell.imgUser.frame.size.height/2
let strImageName : String = (myArrayOfDict.objectAtIndex(indexPath.row).valueForKey("UserImage") as? String)!
cell.imgUser.image = UIImage(named: (strImageName))
cell.lblName.text = myArrayOfDict.objectAtIndex(indexPath.row).valueForKey("UserName") as? String
return cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let str : String = (myArrayOfDict.objectAtIndex(indexPath.row).valueForKey("UserName") as? String)!
txtSearch.text = txtSearch.text! + str
// String(format:"@", myArrayOfDict.objectAtIndex(indexPath.row).valueForKey("UserName") as? String)
UIView.animateWithDuration(0.5) () -> Void in
var frameOftblUserData : CGRect = self.tblUserData.frame
frameOftblUserData.origin.y = 264
frameOftblUserData.size.height = 0
self.tblUserData.frame = frameOftblUserData
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
print(string)
if string.hasPrefix("@")
print("YES")
UIView.animateWithDuration(0.5) () -> Void in
var frameOftblUserData : CGRect = self.tblUserData.frame
frameOftblUserData.origin.y = 132
frameOftblUserData.size.height = 132
self.tblUserData.frame = frameOftblUserData
else
print("NO")
UIView.animateWithDuration(0.5) () -> Void in
var frameOftblUserData : CGRect = self.tblUserData.frame
frameOftblUserData.origin.y = 264
frameOftblUserData.size.height = 0
self.tblUserData.frame = frameOftblUserData
return true;
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
【讨论】:
正是我使用评论建议的内容,+1 兄弟。 感谢回答,有一个问题,当光标位置到达#tagvalue时,我们应该删除整个#tagvalue值而不是每个字母。有办法解决吗?以上是关于在 iOS 中实现 - 带有自定义标记器的 Android MultiAutoCompleteTextView,如 Whatsapp [附加图片]的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.IllegalStateException:在 JSF 中实现自定义标记处理程序时出现 java.lang.InstantiationException
无法在 Antlr4 中实现带有自定义分隔符的 q 引用字符串