从NSArray中选择下一个项目,然后重新开始

时间:2015-03-11 02:13:51

标签: objective-c

我需要在视图控制器中为条款和条件屏幕切换三种不同的字体大小,以无限循环(13,15,17..13,15,17 ......等)。屏幕非常简单,全屏显示文本,导航栏中有一个按钮,按下时,触发事件和事件处理。

这三种字体由三个NSString常量表示。

-(IBAction)toggleFontSize:(id)sender
{
    if (self.currentFontIdentifier == regularFontIdentifier)
    {
        self.currentFontIdentifier = largeFontIdentifier;
    }
    else if (self.currentFontIdentifier == largeFontIdentifier)
    {
       self.currentFontIdentifier = smallFontIdentifier;
    }
    else
    {
       self.currentFontIdentifier = regularFontIdentifier;
    }

    self.termsAndConditionsTextView.font = [[BrandingManager sharedManager] fontWithIdentifier:self.currentFontIdentifier];
}

此代码适用(现在:)),但它是一个很好的地中海IF游艇。我想知道是否有更成熟的方法。我已经看到利益相关者改变主意并添加第4个字体大小。我希望它更易于管理,所以基本上一旦他们添加了一个新的大小,我只会将它添加到某个数组中,那就是它。

有关更成熟算法的任何想法吗?

2 个答案:

答案 0 :(得分:1)

声明当前所选索引的实例变量和三种字体(小型,常规和大型)的数组并尝试:

-(IBAction)toggleFontSize:(id)sender {
    _currentSelectedIndex = (_currentSelectedIndex + 1) % 3;
    self.currentFontIdentifier = _fontIdentifiers[_currentSelectedIndex];
    self.termsAndConditionsTextView.font = [[BrandingManager sharedManager] fontWithIdentifier:self.currentFontIdentifier];
}

您可能不需要currentFontIdentifier属性,因为可以使用_fontIdentifiers[_currentSelectedIndex]

获取

答案 1 :(得分:0)

您可以使用NSArray类的方法'indexOfObject和'lastObject',如:

使用大小数组:

NSArray *fontList = @[@"12","14","18"];

然后你可以使用indexOfObject

迭代它
NSUInteger ix = [fontList indexOfObject:self.currentFontIdentifier] + 1;
if ([[fontList lastObject] isEqual:self.currentFontIdentifier])
    ix=0;
self.currentFontIdentifier = [fontList objectAtIndex:ix];

NSUInteger ix = [fontList indexOfObject:self.currentFontIdentifier] + 1;
if (ix >= [fontList count])
    ix=0;
self.currentFontIdentifier = [fontList objectAtIndex:ix];