0

我有一个附加屏幕截图中描述的要求。单击蓝色添加按钮时,UItextfield必须在最后一个文本字段和 textview 之间再插入一个,并且必须在动态插入的新 uitextfield 旁边出现蓝色添加按钮。任何人都可以建议如何实现这一目标。我已将所有字段放在UIScrollview.

在此处输入图像描述

滚动视图未启用:

在此处输入图像描述

4

5 回答 5

4

你可以这样做:

在 .h 中,我有一个名为的插座previousTextField,它连接到第一个插座。顾名思义,它将存储最新添加的文本字段。

在这里找到正在运行的项目

-(IBAction)addTextField:(id)sender{
    float x=previousTextField.frame.origin.x;
    float y=previousTextField.frame.origin.y+50;//get y from previous textField and add 10 or so in it.
    float w=previousTextField.frame.size.width;
    float h=previousTextField.frame.size.height;
    CGRect frame=CGRectMake(x,y,w,h);
    UITextField *textField=[[UITextField alloc] initWithFrame:frame];
    textField.placeholder = @"Enter User Name or Email";


    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font = [UIFont systemFontOfSize:15];
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.keyboardType = UIKeyboardTypeDefault;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;


    [self.view addSubview:textField];
    previousTextField=textField;
}

只是一个想法/算法如何使用,而不是编译器检查

我错过了事情,改变了+按钮的位置。我认为你可以做到:)

编辑:在上述方法中添加以下内容

//move addbutton which is an outlet to the button
CGRect frameButton=CGRectMake(addButton.frame.origin.x, addButton.frame.origin.y+50, addButton.frame.size.width, addButton.frame.size.height);
[addButton removeFromSuperview];
[addButton setFrame:frameButton];
[self.view addSubview:addButton];
于 2013-03-21T04:52:19.037 回答
0

在添加按钮上,在子视图中添加一个 textfeild 并给 textfeild 一个唯一的标签,这样它可以帮助您区分所有 textfeilds。对于设置框架,请参考您最后一个 textfeild 框架并相应地设置 y 坐标。

UITextField *textField = [[UITextField alloc] initWithFrame:yourFrame];
textField.delegate = self;
textField.tag=yourtag;
[scrollview addSubview:textField];
[textField release];//if arc is disable
于 2013-03-21T04:53:07.273 回答
0

首先获取 UItextField 的框架。现在增加前一个 textFeild 的 yPos 和 UITetField 的新位置。并重新安排低于该 textField 的 UITextField 只需增加每个 TextField 的 yPos 。

希望这会帮助你。

祝一切顺利!!!

于 2013-03-21T04:53:30.137 回答
0

查看我的代码的输出.. 在此处输入图像描述

您可以使用以下代码...我已经完成了它并且它正在按照您的屏幕截图运行..在您的 .h 文件中只需声明此变量

      int newY,newY1;
      UIButton *btn;

然后在 viewDidLoad 方法中的 .m 文件添加以下代码

   UITextField *txt=[[UITextField alloc]init];
   txt.frame=CGRectMake(50,30,140,30);
   txt.placeholder = @"Enter User Name or Email";
   txt.borderStyle = UITextBorderStyleRoundedRect;

   [self.view addSubview:txt];
   newY=txt.frame.origin.y;
   btn=[UIButton buttonWithType:UIButtonTypeContactAdd];
   btn.frame=CGRectMake(250,30, 30, 30);
   [btn addTarget:self action:@selector(addtxtField) forControlEvents:UIControlEventTouchUpInside];
   [self.view addSubview:btn];

& 然后创建一个 addtxtField 方法..见下文

 -(void)addtxtField
{
newY=newY+50;

UITextField *nwtxt=[[UITextField alloc]init];
nwtxt.frame=CGRectMake(50,newY,140,30);
nwtxt.placeholder = @"Enter User Name or Email";
nwtxt.borderStyle = UITextBorderStyleRoundedRect;
[self.view addSubview:nwtxt];

btn.frame=CGRectMake(250,newY, 30, 30);
[self.view addSubview:btn];

}

它根据您的要求 100% 运行...

于 2013-03-21T05:54:32.640 回答
0

输出

试试这个 ::

在 .h 文件中

@property(nonatomic, retain) IBOutlet UIScrollView *scr;
@property(nonatomic, retain) IBOutlet UITextField *txt;
@property(nonatomic, retain) IBOutlet UITextView *txtVw;
@property(nonatomic, retain) IBOutlet UIButton *btn;

-(IBAction)click:(id)sender;

在 .m 文件中

int cnt;

float x = 0.0, y = 0.0, w = 0.0, h = 0.0;

- (void)viewDidLoad
{
    [super viewDidLoad];

    scr.delegate = self;
    scr.contentSize = CGSizeMake(0, 400);

    cnt = 0;
}

-(IBAction)click:(id)sender
{
    if (cnt == 0) {
       x=txt.frame.origin.x;
       y=txt.frame.origin.y + 50;//get y from previous textField and add 10 or so in it.
       w=txt.frame.size.width;
       h=txt.frame.size.height;
    }
    else
    {
       y+=50;
    }

    UITextField *textField=[[UITextField alloc] initWithFrame:CGRectMake(x, y, w, h)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.placeholder = @"Enter User Name or Email";

    [scr addSubview:textField];

    [btn setFrame:CGRectMake(248, y, 30, 30)];

    float y1 = y + 100;
    [txtVw setFrame:CGRectMake(orign_x, y1, origin_w, origin_h)];

    cnt++;
}

希望,它肯定会帮助你。

谢谢。

于 2013-03-21T06:01:10.720 回答