设置`UITextView`和`UITextField`的最大字符数

时间:2015-10-04 16:08:49

标签: ios swift uitextfield uitextview

我想在UITextViewUITextField中设置允许输入的最大字符数。然后,这个数字将以小标签显示(供用户参考,Twitter风格。)

8 个答案:

答案 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)

添加对通过 ma​​xLength 剪切文本的支持 + 避免 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
}