Three20 TabStrip

时间:2012-03-28 12:09:22

标签: ios three20 tabbar

我在我的一个项目中使用TabStrip。标签条具有TTTabItems,即字母A-Z。当我点击每个字母表时,代表会导航到另一个页面。

在另一页中还有一个TTTabstrip(相同的结构,框架等)。如何在不触发事件的情况下在第二个tabtrip上标记字母?

我试图得到字母mod的整数值为“a”的整数值(这样它会给我一个索引)并将其分配给selectedIndex:

unichar letter = [[NSString stringWithString:@"e"] characterAtIndex:0];
/*(k is @"a" unichar)*/
tabBar.selectedTabIndex = letter % kEnglishAlpha;

但它给了我释放错误。

**更新**

在深入细节视图上(我遇到问题)我在评论中提到我有以下来自tt导航:

tt://listWords/Cat

在视图上执行了加载事件,并且在初始化TTTabStrip(仅包含带字母A-Z的TTTabItem)和tabBar.delegate = self声明之后,我使用高位代码“选择”所选字母。视图的其余部分显示了定义和所有相关内容。通常情况就是如此,但是当我使用后退按钮返回到具有tttableItems(cat,catsup,catnip等)的视图时,它会说取消分配控制器。

我的猜测是,使用tabselected委托代码并设置tabindex,它会立即触发选项卡选择代码,这就是问题所在。如果我不使用selectedTabIndex代码,我可以毫无问题地导航回字母。

1 个答案:

答案 0 :(得分:0)

在TTStripTab中没有自动选择TTTabItem的功能。

您必须扩展TTTabStrip并添加此功能:

///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)setSelectedTabIndexToCenter:(NSInteger)selectedTabIndex {
  if (selectedTabIndex>_tabItems.count-1) {
    selectedTabIndex = _tabViews.count-1;
  }

  [self layoutSubviews];
  float horizontalOffset = 0.0f - _scrollView.size.width/2;
  for (int i = 0; i < selectedTabIndex; ++i) {
    TTTab* tab = [_tabViews objectAtIndex:i];
      if (selectedTabIndex-1==i) {
        horizontalOffset += tab.size.width*1.5;

      } else {
          horizontalOffset += tab.size.width;
      }
    }
    if (horizontalOffset<0) {
      horizontalOffset = 0;
    }

    _scrollView.contentOffset = CGPointMake(horizontalOffset, 0);
    [super setSelectedTabIndex:selectedTabIndex];
}

此功能将通过更改条带选项卡的偏移量来选择特定选项卡项目并使其居中。