Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何定制UIActionSheet?网间网操作系统_Objective C_Uiactionsheet - Fatal编程技术网

Objective c 如何定制UIActionSheet?网间网操作系统

Objective c 如何定制UIActionSheet?网间网操作系统,objective-c,uiactionsheet,Objective C,Uiactionsheet,是否可以创建一个ActionSheet,在两个按钮之间有一个标签,如下图所示 编辑2018 我在iOS4中发布了这段代码,当时它可能很有用。从那时起,iOS的发展速度惊人,请不要使用此代码,除非您出于任何原因正在为iOS4编写应用程序!请参考精彩的第三方库,了解您的mondern actionsheet需求 这当然是可能的,我喜欢一直这样做 首先,为UIActionSheet创建一个@属性(在本例中,我的属性名为aac——这非常方便,尤其是当您想通过UITextFields调用它时 接下来,在您

是否可以创建一个
ActionSheet
,在两个按钮之间有一个标签,如下图所示


编辑2018

我在iOS4中发布了这段代码,当时它可能很有用。从那时起,iOS的发展速度惊人,请不要使用此代码,除非您出于任何原因正在为iOS4编写应用程序!请参考精彩的第三方库,了解您的mondern actionsheet需求

这当然是可能的,我喜欢一直这样做

首先,为
UIActionSheet
创建一个
@属性(在本例中,我的属性名为
aac
——这非常方便,尤其是当您想通过
UITextFields
调用它时

接下来,在您提出操作表的方法中,说
-(iAction)用户按下按钮:(id)发送方
,创建操作表的本地实例

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];
然后将其添加到您的属性:
self.aac=actionsheet

现在你基本上有足够的时间来做这个行动表中的任何事情,我将给你一个我在最近一个项目中所做的简短形式:

- (IBAction)sendDataButtonPressed:(id)sender {

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];

    self.aac = actionSheet;

    UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"actionsheet_bg.png"]];
    [background setFrame:CGRectMake(0, 0, 320, 320)];
    background.contentMode = UIViewContentModeScaleToFill;
    [self.aac addSubview:background];

    UIButton *cancelButton = [UIButton buttonWithType: UIButtonTypeCustom];
    cancelButton.frame = CGRectMake(0, 260, 320, 50);
    [cancelButton setBackgroundImage:[UIImage imageNamed:@"actionsheet_button.png"] forState: UIControlStateNormal];
    [cancelButton addTarget:self action:@selector(cancelButtonClicked:)    forControlEvents:UIControlEventTouchUpInside];
    cancelButton.adjustsImageWhenHighlighted = YES;
    [cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
    [cancelButton setTitleColor:[UIColor colorWithRed:0/255.0f green:177/255.0f blue:148/255.0f alpha:1.0f] forState:UIControlStateNormal];
    cancelButton.titleLabel.textAlignment = NSTextAlignmentCenter;
    cancelButton.titleLabel.font = [UIFont fontWithName: @"SourceSansPro-Light" size: 25];

    [self.aac addSubview: cancelButton];

    UIButton *emailResultsButton = [UIButton buttonWithType: UIButtonTypeCustom];
    emailResultsButton.frame = CGRectMake(25, 12, 232, 25);
    [emailResultsButton addTarget:self action:@selector(emailResultsTapped:) forControlEvents:UIControlEventTouchUpInside];
    emailResultsButton.adjustsImageWhenHighlighted = YES;
    [emailResultsButton setTitle:@"Email Results" forState:UIControlStateNormal];
    [emailResultsButton setTitleColor:[UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f] forState:UIControlStateNormal];
    [emailResultsButton setTitleColor:[UIColor colorWithRed:0/255.0f green:177/255.0f blue:148/255.0f alpha:1.0f] forState:UIControlStateHighlighted];
    emailResultsButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    emailResultsButton.titleLabel.font = [UIFont fontWithName: @"SourceSansPro-Light" size: 20];
    [self.aac addSubview: emailResultsButton];

// lots of other buttons...

// then right at the end you call the showInView method of your actionsheet, and set its counds based at how tall you need the actionsheet to be, as follows:

[self.aac showInView:self.view];
[self.aac setBounds:CGRectMake(0,0,320, 600)];
下面是发生的情况的图片(请记住,我省略了代码示例中的所有其他按钮,但它们在这里显示):

现在,如果您想取消操作表--这取决于您如何设置按钮结构,或者可能使用UIToolBar(非常常见)--您可以在按钮的选择器操作中执行以下操作:

-(作废)取消按钮点击:(id)发件人{
[self.aac使用Clicked按钮解除索引:0动画:是];
}

另外,仅供参考,获得适合布局的所有尺寸需要一点时间,因为您使用的不是UIViewController的主UIView视图,而是actionSheet视图,因此它具有不同的尺寸

我做的一个技巧是用UIView在故事板中布局动作表,然后将所有想要的对象放在UIView中的“动作表”中,你应该得到所有图像的精确尺寸


如果您需要澄清,请告诉我,祝您好运!

我只是想添加一个小评论,但我还不能发表评论,因此我将发布完整的答案。如果您想避免IOS7错误,请使用CGContextSetFillColorWithColor:invalid context 0x0。这是一个严重错误。您可以使用以下方法

self.actionSheet = [[UIActionSheet alloc] initWithTitle:@""
                                               delegate:nil
                                      cancelButtonTitle:nil
                                 destructiveButtonTitle:nil
                                      otherButtonTitles:nil];
但是,这会弄乱你的行动表顶部的图形/绘图,正如@Max所说的,因此,如果你还没有添加的背景,只需添加此代码即可为你提供默认的行动表外观

UIView *background = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
background.backgroundColor = [UIColor colorWithRed:204.0/255.0 green:204.0/255.0 blue:204.0/255.0 alpha:1];
[self.actionSheet addSubview:background];

然后在自定义操作表中添加您想要的任何其他内容。

如果您不想使用UIActionSheet上的任何黑客对其进行自定义,您可以查看我制作的UIActionSheet的替代品:它是完全可自定义的!

允许我们创建任何自定义操作表,提供比上述解决方案更大的灵活性。

UIButton* button = (UIButton*)sender;
    actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share the PNR Status" delegate:self
                                     cancelButtonTitle:@"Cancel"
                                destructiveButtonTitle:nil
                                     otherButtonTitles:@"Send Message",@"Send Email",@"Facebook",nil];

    [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:0] setImage:[UIImage imageNamed:@"chat.png"] forState:UIControlStateNormal];
    [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:1] setImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal];
    [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:2] setImage:[UIImage imageNamed:@"facebook_black.png"] forState:UIControlStateNormal];
 //*********** Cancel
    [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:3] setImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
    [actionSheet showFromRect:button.frame inView:self.view animated:YES];
这些是github存储库中包含的一些示例


如果您喜欢Google风格并想要一个轻量级的库,您可以看看以下内容:

完全可以定制


如果您仍在努力解决这个问题,我认为这可能会有所帮助。它可以让您创建自定义操作表。它有一系列内置类型,并且可以扩展和重新设置样式。

我认为您必须学会理解代码并以您想要的方式更改它。请询问我们学习的方法。此代码在IO中产生以下错误S 7:CGContextSetFillColorWithColor:invalid context 0x0。这是一个严重错误。此应用程序或其使用的库正在使用一个无效的上下文,从而导致系统稳定性和可靠性的整体降级。此通知是出于礼貌:请修复此问题。它将在即将进行的更新中成为致命错误。我很抱歉如果您自定义操作表,则会出现与1110相同的错误。@ggfela要删除该错误,只需将标题字符串设置为@”@ggfela这是一个很好的解决方案!不过,就大家所知,我在设置标题时,在动作表中设置背景时注意到了一些图形/绘图问题。仅供参考。在这一点上使用动作表有什么意义?为什么不创建一个UIView并对其进行动画制作?这是使用私有API,将被苹果公司拒绝。此运行g fine我的应用程序在app store上,苹果批准了。是的,但它不受支持,如果他们更新应用程序,将来可能会导致代码中断implementation@WebberLai我几乎可以肯定它不会工作,因为它使用了swift特有的功能。