2014-10-14 24 views
14

Tôi đang bắt đầu phát triển bàn phím tùy chỉnh với iOS8 và mục tiêu-c. Tôi muốn tạo một nút xóa xóa một ký tự đơn lẻ, tại điểm chèn, khi nhấn một lần và xóa toàn bộ các từ khi giữ nó. deleteBackward dường như xóa một ký tự đơn lẻ, nhưng trên tài liệu dành cho nhà phát triển của Apple mà tôi đã tìm thấy:Xóa toàn bộ từ bằng deleteBackward trong bàn phím tùy chỉnh trên iOS 8

Để cho phép bạn xác định số lượng văn bản thích hợp để xóa khi bạn gọi phương thức deleteBackward, hãy lấy bối cảnh văn bản gần chèn điểm từ tài sản của tài sản textDocumentProxy documentContextBeforeInput, như sau:

NSString *precedingContext = self.textDocumentProxy.documentContextBeforeInput; 

sau đó bạn có thể xóa những gì bạn xác định cho phù hợp, ví dụ, một nhân vật duy nhất, hoặc tất cả mọi thứ trở lại t o một ký tự khoảng trống.

Nhưng tôi không hiểu cách đạt được điều đó ... Có cách nào để xóa một từ hoàn chỉnh không?

EDIT: Tôi đã tìm thấy các giải pháp ... đó là một tokenize đơn giản trên documentContextBeforeInput:

-(void)pressDeleteKey{ 
NSArray *tokens = [self.textDocumentProxy.documentContextBeforeInput componentsSeparatedByString:@" "]; 
for (int i = 0; i < [[tokens lastObject] length];i++) { 
    [self.textDocumentProxy deleteBackward]; 
} 

}

+0

tôi đã thực hiện công việc giải pháp trong trường hợp của tôi bằng cách thêm [self.textDocumentProxy deleteBackward]; sau vòng lặp for. Điều này sẽ xóa không gian bên trong mảng. – jaytrixz

Trả lời

0

Tôi đang tìm câu trả lời cho câu hỏi này quá. Cho đến bây giờ, tôi phải sử dụng cho vòng lặp để xóa thư lùi bằng thư.

+0

Rất tiếc, không có phương thức 'replaceStringForRange' hoặc' replaceOccurrence ... 'đơn giản nào cho proxy. * Trừ khi * bạn lặp qua từng ký tự cho đến khi từ của bạn biến mất. –

3

Swift 1.2 Giải pháp:

extension String { 

    var length : Int { 
     get{ 
      return count(self) 
     } 
    } 
} 


func deleteLastWord() { 

     if let textArray:[String]? = proxy.documentContextBeforeInput?.componentsSeparatedByString(" "){ 
     if let validArray = textArray{ 
      for var i=0; i<validArray.last!.length; i++ { 
          proxy.deleteBackward() 
         } 
       } 
     } 
} 
0

Có lẽ tốt nhất và chỉ cược là để đi char bởi char cho đến khi "chữ" của bạn đã bị xoá.

Thay vì dựa vào "khoảng trống" Tôi sẽ cố gắng liệt kê các chuỗi trong chuỗi con như ví dụ:

[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords | NSStringEnumerationLocalized usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) { 
    // Do whatever you want with the words (substrings) 
    [words addObject:@[substring, [NSValue valueWithRange:substringRange]]]; 
}]; 

Sau đó, chỉ cần xóa ngược cho số tương ứng của các nhân vật trong phạm vi bạn được tìm thấy.

Từ tài liệu chính thức của Apple:

Khi sử dụng UITextDocumentProxy, bạn sẽ có không có cách nào dễ dàng để loại bỏ văn bản cho một phạm vi, chuỗi con, hoặc bất cứ điều gì khác mà có thể làm cho cuộc sống của bạn thuận tiện hơn. Chỉ cần viết các phương pháp của riêng bạn! Chúc mừng mã hóa!

.. lol

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