2009-12-08 28 views
5

Tôi đang cố gắng sử dụng nền văn bản tùy chỉnh. Vấn đề là văn bản sau đó dường như quá gần bên trái.Chế độ xem nền tùy chỉnh UITextField và văn bản dịch chuyển

Tôi không thấy bất kỳ cách nào để chuyển văn bản mà không có phân lớp UITextField. Vì vậy, tôi đang cố gắng mở rộng và ghi đè

- (void)drawTextInRect:(CGRect)rect{ 
    NSLog(@"draw rect"); 
    CGRect newRect = CGRectMake(rect.origin.x+20,rect.origin.y,rect.size.width-20,rect.size.height);  
    [super drawTextInRect:newRect]; 
} 

Nhưng vì lý do nào đó nhật ký không bao giờ in. Tôi biết subclass đang được sử dụng kể từ khi tôi cũng có một bản ghi trong init, và rằng in tốt.

Whig goig trên

EDIT.

tôi cũng cố gắng

- (CGRect)textRectForBounds:(CGRect)bounds{ 
    NSLog(@"bounds"); 
    CGRect b = [super textRectForBounds:bounds]; 
    b.origin.x += 20; 
    return b; 
} 

Đó thực sự dấu vết, nhưng nó dường như không được chuyển

Trả lời

14

Tôi nghĩ rằng bạn có thể sử dụng tài sản leftView cho việc này.

Bạn có thể thêm leftViewrightView vào UITextfield. Các chế độ xem này có thể được sử dụng để hiển thị một biểu tượng, nhưng nếu đó là chế độ xem trống, nó sẽ chiếm không gian, đó là những gì bạn muốn.

CGFloat leftInset = 5.0f; 
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, leftInset, self.bounds.size.height)]; 
self.leftView = leftView; 
self.leftViewMode = UITextFieldViewModeAlways; 
[leftView release]; 
+1

không giải thích lý do tại sao những gì tôi đang làm không hoạt động, nhưng chắc chắn giải quyết được vấn đề của tôi. Cảm ơn! Tôi thực sự đã thử như vậy, nhưng bỏ qua viewModeAlways, do đó nó không hoạt động. – dizy

5

Chỉ cần thông tin, nhưng tôi có cùng một vấn đề và cuối cùng cũng nhận ra rằng cũng có phương thức editRectForBounds:. Điều khiển sử dụng công cụ đó khi bạn đang nhập nội dung vào trường. Nếu nó có giá trị và không còn trong chế độ chỉnh sửa, thì nó sử dụng textRectForBounds: để quyết định nơi để vẽ văn bản.

+0

làm việc tốt cho tôi, cảm ơn vì đã làm rõ. – FelixLam

5

Tôi đã không thử phương pháp Thomas, nhưng chỉ để làm rõ câu trả lời của Sean, điều này đã làm việc cho tôi:

MyInsetUITextField.m

#import "MyInsetUITextField.h" 
@implementation MyInsetUITextField 

- (CGRect)textRectForBounds:(CGRect)bounds { 

    return CGRectInset(bounds, 10, 0); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 10, 0); 
} 

@end 

MyInsetUITextField.h

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

@interface MyInsetUITextField : UITextField { 

} 

@end 

Cảm ơn.

+0

bạn có thể cho tôi biết cách thêm hình nền vào lớp con UITextField không? –

+1

Đây là một giải pháp tốt hơn so với Thomas 'và tôi nghĩ rằng nó nên được đánh dấu là câu trả lời đúng. – eladleb

7

Một soultion:

Trong file appDelegate.m bạn viết đoạn code sau ở đầu

@interface UITextField (myCustomTextField) 

@end 

@implementation UITextField (myCustomTextField) 

- (CGRect)textRectForBounds:(CGRect)bounds { 

    return CGRectInset(bounds, 10, 0); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 10, 0); 
} 

@end 
+0

Cảm ơn. Đây là hoàn hảo. – rydgaze

-1

Chỉ cần một người đứng đầu lên, có một LAZY Cách dễ dàng đối với những người trong chúng ta sử dụng Xcode xây dựng giao diện:

  • dễ dàng hơn: đặt một UIImageView đằng sau một trường văn bản

  • dễ dàng nhất: thay đổi kiểu đường viền trên UITextView của bạn thành bất kỳ kiểu nào ngoại trừ "vòng tròn đồ họa" ở bên phải, sau đó thêm hình ảnh làm nền. Hình ảnh được ưu tiên hơn hình ảnh nhưng bạn vẫn nhận được phần đệm cần thiết cho nền hình ảnh bình thường.

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