UISegmentedControl编写文本标签问题

时间:2011-08-17 14:34:44

标签: objective-c uisegmentedcontrol

Goodday,

我在这段代码中遇到了以下问题:

-(void)textpopup:(UISegmentedControl *)sender {

    int nummer = sender.tag;

    if (sender.tag) {
       if(sender.selectedSegmentIndex == 0 || sender.selectedSegmentIndex == 1){
           beoordeling = [[UITextField alloc] init];
           beoordeling.frame = CGRectMake(50 , nummer * 117 + 275 , scrollView.frame.size.width - 100 , 35);
           beoordeling.autoresizingMask = (UIViewAutoresizingFlexibleWidth);
           beoordeling.borderStyle = UITextBorderStyleLine;
           beoordeling.tag = nummer;
           [scrollView addSubview:beoordeling];


       }
        if(sender.selectedSegmentIndex == 2 || sender.selectedSegmentIndex == 3){
            if (beoordeling.tag == sender.tag) {
                [beoordeling removeFromSuperview];
            }
        }

    }
}

我将解释这个场景。我有一些动态的UISegmentedControls。目前有12个。在选择的前两个段中,需要弹出文本字段。这很顺利。但是在选择前两个片段一段时间后,当我转到第2段和第3段时,有时文本字段将不会删除。

我预计在推送段2和3时,当我推送段0和1时写入的文本字段将被删除。

我错过了什么吗?

修改 起初我想说,我从来没有预先知道我有多少UITextFields。当选择段0和1时,UITextField需要弹出到相应的UISegmentedControl。当选择第2和第3段时,UITextField需要远离。但是我现在通过以下方式解决了这个问题。

-(void)textpopup:(UISegmentedControl *)sender {

    int nummer = sender.tag;


       if(sender.selectedSegmentIndex == 0 || sender.selectedSegmentIndex == 1){

           // Before i add a new UITextField, the old one has to be removed.
           UITextField *text = (UITextField *)[beoordeling viewWithTag:sender.tag];
           [text removeFromSuperView];   

           beoordeling = [[UITextField alloc] init];
           beoordeling.frame = CGRectMake(50 , nummer * 117 + 275 , scrollView.frame.size.width - 100 , 35);
           beoordeling.autoresizingMask = (UIViewAutoresizingFlexibleWidth);
           beoordeling.borderStyle = UITextBorderStyleLine;
           beoordeling.tag = nummer;
           [scrollView addSubview:beoordeling];


       }
        else if(sender.selectedSegmentIndex == 2 || sender.selectedSegmentIndex == 3) {

            UITextField *tf = (UITextField *)[beoordeling viewWithTag:sender.tag];
            tf.text = nil;
            [tf removeFromSuperview];

        }


    }

2 个答案:

答案 0 :(得分:0)

不确定你想要在这里实现什么,但你确实需要释放你的UITextField对象,否则你会泄漏。 AddSubview为保留计数添加了一个,所以应该可以安全地立即释放:

[scrollView addSubview:beoordeling];
[beoordeling release];

答案 1 :(得分:0)

第二个if应该是else if,因为它应该仅在第一个不执行时执行(所选索引不能同时为0和2)。

您要做的事情取决于您如何定义beoordeling。我建议将它作为实例变量,甚至可能是IBOutlet。在班级的dealloc中发布。然后,在第一个if子句中,写

if (!beoordeling) {
    beoordeling = [[UITextField alloc] init];
    // Other setup
}
[scrollView addSubview:beoordeling];

我不太明白为什么要检查代码,但要在第二个if中删除,只需致电removeFromSubview

您的所有分段控件是否都会调用相同的行为?如果您只有一个beorrdeling正在设置标记,那么您无需费心检查标记。只需使用removeFromSubview添加/删除它即可。如果您拥有与分段控件一样多的文本字段,那么KVC可能就是您想要的。如果您的分段控件标记为0-11,则可能包含beoordeling0beoordeling1beoordeling2,依此类推。然后,为了得到你想要的那个,使用这样的东西:

beoordeling = (UITextField *)[self valueForKey:[NSString stringWithFormat:@"beoordeling%d", sender.tag]];