ginofalaci
ginofalaci

Reputation: 3

How to set up a button to invert two textFields

I'm an absolute beginner, and I need to have a button to invert two text fields:
text1 <—> text2

- (IBAction)swapText {
    name.text = surname.text;
    surname.text = name.text;
}

I know that I have to retain the values and then release them, but I'm not sure how to write it.

Upvotes: 0

Views: 143

Answers (3)

5StringRyan
5StringRyan

Reputation: 3634

Based on your code given, your text in the first textfield will be lost. The easiest way to fix that is to declare a temp NSString object that will hold the string that is contained in name.text:

- (IBAction)swapText{

  // create a temp string to hold the contents of name.text
  NSString *tempString = [NSString stringWithString: name.text];

  name.text = surname.text;
  surname.text = tempString;
}

Since you are using dot notation, it is assumed that "name" and "surname" are properties for the IBOutlet references to both textfields that you want to swap. If this is the case, as long as you have "retain" for both of these properties, that will take care of the memory management (as long as you release these in the dealloc method in the .m file).

Upvotes: 0

AliSoftware
AliSoftware

Reputation: 32681

This is quite simple: the only text / NSString you have to retain is the one that will stop being hold by the UITextField itself, namely the name.text that you will replace by surname.text.

- (IBAction)swapText {
  NSString* temp = [name.text retain];
  name.text = surname.text;
  surname.text = temp;
  [temp release];
}

Upvotes: 1

Joey
Joey

Reputation: 535

The only objects you need to take care of would be alloc/deallocating the UITextFields. Assuming your UITextfields are ivars (declared in your header file) you can use the following code:

- (void)viewDidLoad 
{
  [super viewDidLoad];
  CGRect b = [[self view] bounds];

  _txt1 = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMidX(b)-100, 50, 200, 29)];
  [_txt1 setBorderStyle:UITextBorderStyleRoundedRect];
  [[self view] addSubview:_txt1];

  _txt2 = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMidX(b)-100, 100, 200, 29)];
  [_txt2 setBorderStyle:UITextBorderStyleRoundedRect];
  [[self view] addSubview:_txt2];

  UIButton* btnSwap = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [btnSwap setFrame:CGRectMake(CGRectGetMidX(b)-75, 150, 150, 44)];
  [btnSwap setTitle:@"Swap Text" forState:UIControlStateNormal];
  [btnSwap addTarget:self action:@selector(tappedSwapButton) forControlEvents:UIControlEventTouchUpInside];
  [[self view] addSubview:btnSwap];
}

- (void)tappedSwapButton
{
  NSString* text1 = [_txt1 text];
  NSString* text2 = [_txt2 text];

  [_txt2 setText:text1];
  [_txt1 setText:text2];
}

- (void)dealloc
{
  [_txt1 release];
  [_txt2 release];

  [super dealloc];
}

Upvotes: 0

Related Questions