每次调用委托函数时如何进行textfield alloc?

时间:2009-05-28 07:26:06

标签: iphone

我正在使用这样的代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tv {
    return 3;
}

- (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section {
    if(section==2)
        return 20;
    else
        return 1;

}

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    //if (cell == nil)
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MyIdentifier"]autorelease];

    // Configure the cell
    switch (indexPath.section) {
        case 0:
        {
            textField=[[[UITextField alloc]initWithFrame:CGRectMake(5, 10, 290, 70)]autorelease];
            textField.delegate=self;
            textField.keyboardType=UIKeyboardTypeURL;
            textField.autocorrectionType=YES;
            textField.textColor=[UIColor blackColor];
            textField.placeholder=@"Enter feed url";
            [cell.contentView addSubview:textField];
            break;
        }
        case 1:
        {
            textField1=[[[UITextField alloc]initWithFrame:CGRectMake(5, 10, 290, 70)]autorelease];
            textField1.delegate=self;
            textField1.keyboardType=UIKeyboardTypeURL;
            textField1.textColor=[UIColor blackColor];
            textField1.autocorrectionType=YES;
            textField1.placeholder=@"Enter starting url";
            [cell.contentView addSubview:textField1];
            break;
        }
        case 2:
        {
            cell.text=[[PopeularSiteArray objectAtIndex:indexPath.row]objectForKey:@"Title"];
            break;
        }
        default :
            break;

    }
    return cell;
}

当我滚动我的tableview时,textfield应该在每次调用委托函数时分配...我改变了那个代码,就像textfield什么时候只会创建它但是那个时候它会在textfield中显示垃圾值。

我可以在这里使用什么?

1 个答案:

答案 0 :(得分:0)

你应该始终对你添加到UITableView单元格的控件有一个参考:UITextFiled,UISwitch等。通过这种方式,你可以与控件交互以及更容易地获取/设置值。否则,您必须使用cellForRowAtIndexPath找到正确的单元格并尝试获取子控件。

解决您的问题:

  1. 将textFieldFeedURL和textFieldStartingURL添加为类成员(在.h文件中)。
  2. 在viewDidLoad或cellForRowAtIndexPath
    if (textFieldFeedURL != nil) {
    textFieldFeedURL = [[UITextField alloc] initWithFrame:CGRectMake(5, 10, 290, 70)];
    }
  3. 中分配ONCE这些成员
  4. 使用addSubView将文本字段添加到cellForRowAtIndexPath中的单元格。
  5. 在dealloc中发布文本字段。
  6. 如果你的app有几十个控件,你可以在NSMutableArray中保留一个引用。

    我希望我能理解你的问题。祝你好运!