2

我正在尝试删除textborderstyle. 我知道我得到了对正确对象的引用,因为我能够更改to并看到可见的变化。UITextFieldUISearchBarTextBorderStyleRoundedRect

我尝试使用以下代码对 UISearchBar 进行子类化:

- (void)layoutSubviews {
  UITextField *searchField;
  NSUInteger numViews = [self.subviews count];
  for(int i = 0; i < numViews; i++) {
    if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) { //conform?
        searchField = [self.subviews objectAtIndex:i];
    }
  }
  if(!(searchField == nil)) {
    [searchField setBorderStyle:UITextBorderStyleNone];
  }
  [super layoutSubviews];
}

我也在课堂上试过这个:

UITextField *txtSearchField = [_searchBar valueForKey:@"_searchField"];
[txtSearchField setBackgroundColor:[UIColor clearColor]];
[txtSearchField setBorderStyle:UITextBorderStyleNone];

这些都不起作用。默认情况下,UITextBorderStyleLine如果我手动将其设置为None. 不幸的是,我无法找到删除边框样式的方法。有谁知道如何做到这一点?我试图弄清楚这一点,因为我需要我的搜索栏看起来像一个UITextField. 在这一点上,我正在辩论只是切换到UITextField幕后。

4

2 回答 2

1

我很确定实现这一点的唯一方法是继承 UISearchBar!

将其子类化后,在您的 layoutSubviews 方法中尝试此代码!

- (void)layoutSubviews {
   UITextField *searchField;
   NSUInteger numViews = [self.subviews count];
   for(int i = 0; i < numViews; i++) {
      if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) { //conform?
        searchField = [self.subviews objectAtIndex:i];
      }
   }
   if(!(searchField == nil)) {
       searchField.textColor = [UIColor whiteColor];
       [searchField setBackground: [UIImage imageNamed:@"buscador.png"] ];
       [searchField setBorderStyle:UITextBorderStyleNone];
   }

   [super layoutSubviews];
}

此处找到的问题删除了 uisearchbar 中的 uitextfield 的边框回答了您最初的问题!

您还可以参考如何自定义 UISearchBar 的外观以获取更多信息!

希望这可以帮助!

于 2013-04-01T22:00:51.543 回答
1

只是不要忽视评论(当我遇到同样的问题并提出这个问题时,我只是这样做了)。如果以编程方式,您的 UITextField 的边框样式“未”设置为 UITextBorderStyleNone,请尝试在设置边框样式之前设置 UITextField 的背景或 backgroundColor 属性!它有效!

于 2013-04-17T15:35:44.963 回答