2016-09-26 19 views
11

Tôi đang thực hiện kiểm soát hoạt động như một số NSTokenField (bộ chọn địa chỉ trong Thư, ví dụ) để sử dụng trong iOS. Tôi sử dụng số ngang UICollectionView và ô ngoài cùng bên phải của tôi là UITextField. Điều khiển này sẽ xuất hiện trong biểu mẫu với các trường văn bản khác có văn bản căn phải. Để điều khiển mới của tôi nhìn ngay trong ngữ cảnh này, tôi muốn cho UITextField luôn ở cạnh bên phải của UICollectionView và để các thẻ được chọn xuất hiện ở bên trái của nó.Ghim một ô trong UICollectionView ngang sang bên phải

Hiện tại, khi lần đầu tiên tôi nhấp vào hàng này, trường văn bản cuộn sang trái và sau đó nó được đẩy sang bên phải khi có thêm thẻ. Một khi nó được tuôn ra với các cạnh bên phải của UICollectionView (khi 'Appetizer' được thêm vào trong hình dưới đây), sau đó tôi bắt đầu nhận được hành vi tôi muốn.

Tag selection

Tôi đã suy nghĩ về một cái gì đó giống như một chiều rộng tối thiểu trên UITextField nên nó chiếm càng nhiều chiều rộng như hiện có sẵn lúc đầu và ngày càng ít như thẻ được thêm vào. Hoặc luân phiên, một số cách để gắn trường cố định với bên phải. Tuy nhiên, tôi chưa tìm ra cách để thực hiện những ý tưởng này!

Tôi làm cách nào để trường văn bản luôn ở bên phải của UICollectionView?

Trả lời

0

Là một phần của UICollectionViewDataSource

Hãy thử sử dụng

// Quan điểm cho rằng sẽ được trả về phải được lấy ra từ một cuộc gọi đến -dequeueReusableSupplementaryViewOfKind: withReuseIdentifier: forIndexPath: - (UICollectionReusableView *) collectionView: (UICollectionView *) collectionView viewForSupplementaryElementOfKind: (NSString *) loại atIndexPath: (NSIndexPath *) indexPath;

Và xác định chế độ xem của bạn có chứa trường văn bản làm chân trang.

5

Đây là giải pháp mà UITextField không thuộc UICollectionView.

enter image description here

tôi thêm collectionView và TextField trên kịch bản của tôi với những hạn chế bố trí như sau: CollectionView: Dẫn đến SuperView, Chiều cao, Top để SuperView, khoảng cách ngang với TextField. TextField: Chiều cao bằng collectionView, Trailing to superview, Width = 100, khoảng cách ngang với collectionView.

Tôi đã tạo một IBOutlet cho giới hạn chiều rộng của textField. Chiều rộng được thay đổi động khi nhập văn bản.

Swift 3 Mẫu Mã

class ViewController: UIViewController { 

    @IBOutlet weak var collectionView: UICollectionView! 
    @IBOutlet weak var textField: UITextField! 
    @IBOutlet weak var textFieldWidthConstraint: NSLayoutConstraint! 

    var textArray: [String] = [String]() 

    @IBAction func editingChanged(_ sender: AnyObject) { 
     let size = textField.sizeThatFits(textField.frame.size) 
     textFieldWidthConstraint.constant = max(size.width,100) 

     if textArray.count > 0 { 
      self.collectionView.scrollToItem(at: IndexPath(row: self.textArray.count-1, section: 0), at: .right, animated: true) 
     } 
    } 

    @IBAction func addText(_ sender: AnyObject) { 
     if textField.text?.characters.count ?? 0 > 0 { 
      textArray.append(textField.text!) 
      textField.text = "" 
      textFieldWidthConstraint.constant = 100 
      let newIndexPath = IndexPath(row: textArray.count-1, section: 0) 
      collectionView.insertItems(at: [newIndexPath]) 
      collectionView.performBatchUpdates({ 
       }, completion: { (_) in 
        self.collectionView.scrollToItem(at: newIndexPath, at: .right, animated: true) 
      }) 
     } 
    } 

} 
+0

tôi cũng đã suy nghĩ về cùng ... Câu trả lời này là một cách giải quyết tốt đẹp. Nó sẽ cho hiệu quả của những gì bạn yêu cầu. @ Hélène Martin –

+0

Cảm ơn bạn rất nhiều @ carien-van-zyl. Tôi sẽ chơi với điều này trong vài ngày tới. Tôi xin lỗi vì tiền thưởng đã hết hạn - tôi đã đi xa vài ngày! –

Các vấn đề liên quan