我想在UITextView
和UITextField
中设置允许输入的最大字符数。然后,这个数字将以小标签显示(供用户参考,Twitter风格。)
答案 0 :(得分:75)
更新 Swift 4.X
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
let numberOfChars = newText.count
return numberOfChars < 10 // 10 Limit Value
}
试试这个:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
let numberOfChars = newText.characters.count // for Swift use count(newText)
return numberOfChars < 10;
}
答案 1 :(得分:35)
SWIFT 4
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
return newText.count < 10
}
答案 2 :(得分:12)
Swift 4:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
return newText.count <= 70
}
答案 3 :(得分:6)
Swift 3.0
只需覆盖此UITextFieldDelegate函数,设置所需的characterLimit变量就可以了:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
let characterLimit = 5
let newText = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
let numberOfChars = newText.characters.count
return numberOfChars < characterLimit
}
答案 4 :(得分:3)
Swift 4 / Xcode 9.1
public class ChatsFragment extends Fragment {
FirebaseDatabase database;
DatabaseReference myRef;
List<ListData> list;
RecyclerView recyclerview;
TextView badge;
String name, message, nameCaps;
int id, user_id;
DatabaseHelper databaseHelper;
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle b) {
View view = inflater.inflate(R.layout.fragment_chats, group, false);
recyclerview = view.findViewById(R.id.rview);
badge = view.findViewById(R.id.badge);
database = FirebaseDatabase.getInstance();
myRef = database.getReference("message");
list = new ArrayList<>();
databaseHelper = new DatabaseHelper(getContext());
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
UserDetails userdetails = dataSnapshot.getValue(UserDetails.class);
name = userdetails.getName();
message = userdetails.getMessage();
id = userdetails.getId();
user_id = userdetails.getUser_id();
nameCaps = name.substring(0, 1).toUpperCase() + name.substring(1);
if (databaseHelper.checkUserID(user_id)) {
databaseHelper.updateMsg(nameCaps, message, user_id);
} else {
databaseHelper.insertData(nameCaps, message, id, user_id);
}
list = databaseHelper.getData();
RecyclerViewAdapter recycler = new RecyclerViewAdapter(list);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerview.setLayoutManager(layoutManager);
recyclerview.setItemAnimator(new DefaultItemAnimator());
recyclerview.setAdapter(recycler);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
UserDetails userdetails = dataSnapshot.getValue(UserDetails.class);
name = userdetails.getName();
message = userdetails.getMessage();
id = userdetails.getId();
nameCaps = name.substring(0, 1).toUpperCase() + name.substring(1);
databaseHelper.updateData(nameCaps, message, id);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
UserDetails userdetails = dataSnapshot.getValue(UserDetails.class);
id = userdetails.getId();
databaseHelper.deleteData(id);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return view;
}
答案 5 :(得分:1)
Swift 4,Xcode 9.1 GM
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
adjustFrames()
return textView.text.count + (text.count - range.length) <= 200
}
答案 6 :(得分:0)
雨燕5
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
var newText = textView.text!
newText.removeAll { (character) -> Bool in
return character == " " || character == "\n"
}
return (newText.count + text.count) <= 40
}
答案 7 :(得分:0)
添加对通过 maxLength 剪切文本的支持 + 避免 UNDO 操作崩溃:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if let maxLength = maxLength {
let maxReplacementLength = min(range.length, maxLength - range.location)
let replacementRange = NSRange(location: range.location, length: maxReplacementLength)
let result = NSString(string: (textView.text ?? "")).replacingCharacters(in: replacementRange, with: text)
if result.count <= maxLength && range.length <= maxLength - range.location {
return true
}
textView.text = String(result[..<result.index(result.startIndex, offsetBy: min(result.count, maxLength))])
return false
}
return true
}