每次单击按钮后,如何在 UILabel 上逐一显示文本?

Posted

技术标签:

【中文标题】每次单击按钮后,如何在 UILabel 上逐一显示文本?【英文标题】:How do I display text on UILabel one-by-one after each click of my button? 【发布时间】:2015-04-21 08:45:24 【问题描述】:

我有一个包含文本的数组,我想循环浏览,这样每次我点击我的按钮时,它都会一个接一个地显示文本;

但是,我的代码一键循环遍历整个数组:

- (IBAction)nextButtonOneClicked:(id)sender 

    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three",
                             @"Label Four", @"Label 5", @"Label 6"];

    for (int i=0; i<[titles count]; i++) 
        NSLog(@"%@", titles[i]);
    


我将如何做到这一点,以便每次单击按钮时都会一个接一个地显示文本?

【问题讨论】:

【参考方案1】:

在视图控制器 .m 文件中为类扩展添加一个变量以保持当前状态,然后在每次单击按钮时递增该变量:

@interface MyViewController() 
    int _currentTitle;
    NSArray *_titles;

@end

-(instancetype)initWithCoder:(NSCoder *)decoder 
    if (self = [super initWithCoder:decoder]) 
        _currentTitle = 0;
        _titles = @[@"Label One", @"Label Two", @"Label Three",
                             @"Label Four", @"Label 5", @"Label 6"];
    
    return self;


- (IBAction)nextButtonOneClicked:(id)sender 
    NSString *str = _titles[_currentTitle++];
    NSLog(@"%@", str);
    myLabel.text = str;
    if (_currentTitle == _titles.count) 
        _currentTitle = 0;
    

【讨论】:

instancetype方法不应该返回self吗? @JohnSmith 是的,应该:) 酷!完美工作:) 谢谢!【参考方案2】:
@interface myViewController ()

  int i;  
  NSArray *titles;



- (void)viewDidLoad 
    [super viewDidLoad];
    i=0;
    titles = @[@"Label One", @"Label Two", @"Label Three",
                                 @"Label Four", @"Label 5", @"Label 6"];
   


 - (IBAction)nextButtonOneClicked:(id)sender 

     if(i<[titles count])
        NSLog(@"%@", titles[i]);
        i++
     else
     i=0;
     

【讨论】:

【参考方案3】:

我认为你可以使用static 变量类型 代码在这里

- (IBAction)buttonPressed:(id)sender 
  static int Index = 0;
  NSArray *titles = @[@"Label One", @"Label Two", @"Label Three",
                    @"Label Four", @"Label 5", @"Label 6"];
  NSLog(@"%@", titles[Index]);
  Index++;
  if( Index >= titles.count) 
      Index = 0;
 

【讨论】:

【参考方案4】:

您可以通过在类中创建一个成员变量来跟踪访问和打印字符串所使用的索引,如

// declare counter
int titleIndexCounter;

// initialize it
titleIndexCounter = 0;

// manipulate it in button's event handler as
- (IBAction)nextButtonOneClicked:(id)sender 

    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three",
                             @"Label Four", @"Label 5", @"Label 6"];
    NSLog(@"%@", [titles objectAtIndex:titleIndexCounter]);
    titleIndexCounter++;
    if (titleIndexCounter == titles.count)
        titleIndexCounter = 0;

你也可以通过在按钮的事件处理程序中创建一个静态变量来做同样的事情(但这是一种不太受欢迎的方法)-

// manipulate it in button's event handler as
- (IBAction)nextButtonOneClicked:(id)sender 

    static int titleIndexCounter = 0;

    NSArray *titles = @[@"Label One", @"Label Two", @"Label Three",
                             @"Label Four", @"Label 5", @"Label 6"];
    NSLog(@"%@", [titles objectAtIndex:titleIndexCounter]);
    titleIndexCounter++;
    if (titleIndexCounter == titles.count)
        titleIndexCounter = 0;

【讨论】:

【参考方案5】:

在接口中声明一个整数变量。 int i=0;

执行以下代码:

-(IBAction)nextButtonClicked:(id)sender



 NSArray *array=@[@"Label 1",@"Label 2",@"Label 3",@"Label 4",@"Label 5",@" Label 6"];  

  label.text=[array objectAtIndex:i]; 

  NSLog(@"label %@",[array objectAtIndex: i]); 

  i=i+1; 


【讨论】:

以上是关于每次单击按钮后,如何在 UILabel 上逐一显示文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSArray 值设置为 UILabel

在ios中截断后如何在UILabel文本的末尾添加“更多”

使用 UIButton 从 UIPickerView 向 UILabel 显示输出

如何存储所有选定的按钮值并在 UILabel 上显示它们?

每次单击显示列按钮后,表格列的宽度都会增加

如何从 iPhone 中的子视图更新超级视图 UILabel 文本?