有没有办法在UIActionSheet中更改标题字体大小?

时间:2010-10-12 23:47:14

标签: iphone font-size uiactionsheet

字体非常小,有些人难以阅读,所以我想让它更接近下面按钮上使用的字体大小。

8 个答案:

答案 0 :(得分:16)

您可以在show方法之后更改font属性(如showFromBarButtonItem),如下所示。

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame];
UILabel *newTitle = [[[UILabel alloc] initWithFrame:oldFrame] autorelease];
newTitle.font = [UIFont boldSystemFontOfSize:17];
newTitle.textAlignment = UITextAlignmentCenter;
newTitle.backgroundColor = [UIColor clearColor];
newTitle.textColor = [UIColor whiteColor];
newTitle.text = @"My Title";
[sheet addSubview:newTitle];

[sheet release];

答案 1 :(得分:2)

就像Nimrod所说,你不能用本机方法做到这一点。您可以检查UIActionSheet子视图,找到好的子视图并更改其属性。

<强> BUT

  • 此实现可能会崩溃 未来iOS更新
  • Apple可能拒绝您的应用
  • UIActionSheet是原生元素 iPhone GUI和用户都很熟悉 用它

<强> SO

你真的不应该改变使用的字体大小..如果这个UIActionSheet标题很重要,你应该找到另一种方式向用户显示...

答案 2 :(得分:2)

@ user651909的答案对我很有用,虽然只是为了增加一些细节:

创建initWithTitle:@" "时,我必须UIActionSheet(请注意非空字符串),以便视图在顶部有一些空格可供开头的任何文本使用。然后,在执行[popupQuery showInView:self.view];之后,我添加了他的建议,以便初始化oldFrame。最后,我补充道:

[newTitle sizeToFit];
newTitle.frame = CGRectMake(oldFrame.origin.x, 
                            oldFrame.origin.y, 
                            oldFrame.size.width, 
                            newTitle.frame.size.height);

这是必要的,因为oldFrame的高度对于我的较大字体(尺寸20)而言太小,导致一些字母被剪切在底部。即使使用这个调整,如果你使文本太大,比大于boldSystemFontOfSize:26,文本将运行得太近或下面的按钮。调整工作表框架的大小没有帮助,因为按钮似乎固定在顶部。

据推测

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 

没有违反Apple不使用任何内部API的政策,对吗?

答案 3 :(得分:2)

来自UIActionSheet Class Reference

  

UIActionSheet不是为子类设计的,也不应该在其层次结构中添加视图。如果您需要提供比UIActionSheet API提供的更多自定义的工作表,您可以创建自己的工作表并使用presentViewController:animated:completion:以模态方式呈现它。

答案 4 :(得分:1)

UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Share" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Facebook", @"Twitter",nil];
[sheet showInView:self.view];
if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
     CGRect labelFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame];
     [[[sheet subviews] objectAtIndex:0] removeFromSuperview];
     UILabel *newTitle = [[UILabel alloc] initWithFrame:labelFrame];
     newTitle.font = [UIFont boldSystemFontOfSize:17];
     newTitle.textAlignment = UITextAlignmentCenter;
     newTitle.backgroundColor = [UIColor clearColor];
     newTitle.textColor = [UIColor whiteColor];
     newTitle.text = @"Share";
     [sheet addSubview:newTitle];
 }

答案 5 :(得分:0)

嗯,有办法做到这一点 - 我在github上创建了一个名为LTActionSheet

的UIActionSheet子类

正如其他人提到的,如果您使用它可能会发生各种可怕的事情(我还没有发货代码......但是:-))如果您在被接受的应用程序中使用它,请让我们都知道!

答案 6 :(得分:0)

UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"SpecifySearch" 
                delegate:self 
       cancelButtonTitle:@"Cancel" 
  destructiveButtonTitle:nil 
       otherButtonTitles:@"UncategorizedContacts" , nil];

//as.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
[as showFromTabBar:self.tabBarController.tabBar];

if( as.subviews.count > 0 
    && [[as.subviews objectAtIndex:0] isKindOfClass:[UILabel class]] ){
    UILabel* l = (UILabel*) [as.subviews objectAtIndex:0];
    [l setFont:[UIFont boldSystemFontOfSize:20]];
}

[as release];

答案 7 :(得分:0)

正如conecon所展示的那样,你可以得到一个指针并操纵它。如果我理解你正在尝试做的是:

[sheet showInView:[self.view window]];
UILabel *title = [[sheet subviews] objectAtIndex:0];
title.font = [UIFont boldSystemFontOfSize:20];
title.textAlignment = UITextAlignmentCenter;

希望这有帮助!