【问题标题】:Changing the title of a specific command button based on its tag根据标签更改特定命令按钮的标题
【发布时间】:2014-01-25 13:56:47
【问题描述】:

我对 Xcode 比较陌生,需要一些帮助。因此,我的视图有 2 个按钮(它有更多按钮,但为了简单起见,假设为 2 个),它们都连接到一个 IBAction。当按下每个按钮时,一个 Picker 会显示加载了一个数组,具体取决于按下哪个按钮。我希望按钮的标题与用户在 PickerView 中选择的内容相匹配。

我知道我必须修改pickerView:didSelectRow 方法中的一些代码,但我不知道该怎么做。它现在的工作方式是,无论我单击哪个按钮(我应该注意加载了正确的数组,以便该部分正常工作),带有标签“0”的按钮将使用选定的 Picker 行的内容进行修改。所以我需要修改 SELECTED 标记处的按钮。

我的头文件是:

@interface XYZSecondViewController : UIViewController <UITextFieldDelegate,   UIPickerViewDataSource, UIPickerViewDelegate>

@property (strong, nonatomic) IBOutlet UIPickerView *myPicker;
@property (strong, nonatomic) IBOutlet UIButton *myButton;

- (IBAction)myButton:(id)sender;

@end

我的实现文件:

#import "XYZSecondViewController.h"
@interface XYZSecondViewController ()
  @property (strong,nonatomic) NSArray *myArray1;
  @property (strong,nonatomic) NSArray *myArray2;
  @property (strong,nonatomic) NSArray *chosenArray;
@end

@implementation XYZSecondViewController
@synthesize myButton, myPicker;

- (IBAction)myButton:(id)sender
{
    switch ([sender tag])
    {
        case 0:
            self.chosenArray = self.myArray1;
            break;
        case 1:
            self.chosenArray = self.myArray2;
            break;
    }
    [self.myPicker reloadAllComponents];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row   forComponent:(NSInteger)component
{
      return [chosenArray objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:  (NSInteger)component
{
      [myButton setTitle:[chosenArray objectAtIndex:row] forState:UIControlStateNormal];
}

【问题讨论】:

    标签: ios objective-c uibutton uipickerview


    【解决方案1】:

    您可以跟踪当前点击的按钮的标签。

    类似这样的:

    @property (nonatomic) NSInteger tagLastTappedButton;
    
    ...
    
    - (IBAction)myButton:(id)sender
    {
        tagLastTappedButton = sender.tag;
        ...
    }
    
    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:  (NSInteger)component
    {
          UIButton *buttonTapped = (UIButton *)[self.view viewWithTag:tagLastTappedButton];
         [buttonTapped setTitle:[chosenArray objectAtIndex:row] forState:UIControlStateNormal];
    }
    

    【讨论】:

      【解决方案2】:

      在你的标题中取一个整数:

      int flag;
      

      修改你的 switch 大小写:

      switch ([sender tag])
          {
              case 0:
                  self.chosenArray = self.myArray1;
                  flag=0;
                  break;
              case 1:
                  self.chosenArray = self.myArray2;
                  flag=1;
                  break;
          }
      

      并在您的 didSelectRow 中进行 IF 声明,例如:

      if (flag==0) {
          [myButton1 setTitle:[chosenArray objectAtIndex:row] forState:UIControlStateNormal];
      }else{
          [myButton2 setTitle:[chosenArray objectAtIndex:row] forState:UIControlStateNormal];
      }
      

      【讨论】:

      • 我认为这行不通,因为我没有“myButton1”、“myButton2”等。我只有多个按钮,它们都称为“myButton”,但它们的 Tag 属性不同。我说的对吗?
      • 但是在您的问题中,您是说我有两个按钮,因此您必须采用两个单独的 IBOutlets 并分别连接它们。
      • 不,但我说“它们都连接到一个 IBAction”。我只是为每个按钮设置了不同的标签值。无论如何,小误会:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多