在UITextField中添加按钮

时间:2012-01-19 14:12:50

标签: iphone ios sdk uitextfield

我正在开发适用于iOS的浏览器应用,并希望在位置栏的文本字段内添加“阅读器”按钮,就像Mobile Safari在检测到该页面是文章时所做的那样。 在UITextField的右侧添加按钮的好方法是什么?

3 个答案:

答案 0 :(得分:4)

您可能希望使用UITextField的rightView属性。基本上,有两个属性(相应地这一个和leftView)允许您在UITextField中放置自定义视图/控件。您可以通过rightViewMode / leftViewMode属性控制是否显示这些视图:

UIButton *myButton = [UIButton new];
// configure your button here
myTextField.rightView = myButton;
myTextField.rightViewMode = UITextFieldViewModeUnlessEditing; // check the docs for other possible values

此外,还有一个名为rightViewRectForBounds:的方法,它返回自定义视图/控件所在的CGRect。你不应该直接在那里传递你的按钮的尺寸,而是如果你想要放置一个肯定比这个方法返回的矩形更大的东西(看起来像UITextField在你放置一个视图时代表你调用它),你的视图将缩放以适合这个矩形。在这种情况下你可能想要覆盖它(创建你的类别或UITextField的子类。假设,你去找一个类别,你的UITextField + MyButton应该是这样的:

@interface UITextField(MyButton)
- (CGRect)rightViewRectForBounds:(CGRect)bounds;
@end

@implementation UITextField(MyButton)

- (CGRect)rightViewRectForBounds:(CGRect)bounds
{
    // return the CGRect that would fit your view/button. The buttons param that is passed here is the size of the view that is being added to the textField.
}

// possibly some other methods that you override

@end
希望这会有所帮助。正如另一个答案中所述,首先检查文档以了解哪些方法可以帮助您。

答案 1 :(得分:0)

只需添加UIButton并对其进行定位,使其与UITextField重叠,无论您想要的位置是什么,其大小都会使其“适合”UITextField

只要您在添加UITextField后将其添加到视图中,它就会在其上方显示。

答案 2 :(得分:0)

首先,在头文件

上实现您的UIButton

·H

@properties (nonatomic, strong) UIButton *headerButton;

然后是实现文件(.m)

@synthesize headerButton;

- (void)viewDidLoad
{

    UITextField *urlField = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 100, 20)];
    //your url processing code here
    //...
    //...
    //...
    [self.view addSubview:urlField];
    //declare your reader button
    readerButton = [[UIButton alloc]initWithFrame:CGRectMake(70, 10, 25, 20)];
    [readerButton addTarget:self action:@selector(readerButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    readerButton.hidden = YES;
}

最后将此添加到ur url处理方法,以便只有在页面可读时才会显示阅读器按钮

   //add your condition
    if( page is pdf or readable )
    {
        readerButton.hidden = NO;
    }
    else
    {
        readerButton.hidden = YES;
    }