原问题来自于CSDN问答频道,更多解决方案见:http://ask.csdn.net/questions/2156
问题描述:
需要在actionsheet修改imageView的边界属性:
<!-- language: lang-c --> #pragma UIActionSheetDelegate Methods - (void)willPresentActionSheet:(UIActionSheet *)actionSheet { /*[[[actionSheet valueForKey:@"_buttons"] objectAtIndex:0] imageView].frame = CGRectMake(0, 0, 25.0f, 25.0f);*/ [[[actionSheet valueForKey:@"_buttons"] objectAtIndex:0] imageView].bounds = CGRectMake(0, 0, 25.0f, 25.0f); /*UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 25.0f, 25.0f)]; imgView.image = [UIImage imageNamed:@"symbol-pin.png"]; [[actionSheet superview] addSubview:imgView];*/ }
然后在编码之后什么也出现:
[[[actionSheet valueForKey:@"_buttons"] objectAtIndex:0] imageView].bounds = CGRectMake(0, 0, 25.0f, 25.0f);
创建actionsheet的代码:
<!-- language: lang-c --> - (IBAction)showModeOptions:(id)sender { if (!modeOptions) { modeOptions = [[UIActionSheet alloc]initWithTitle:@"" delegate:self cancelButtonTitle:@"Abbrechen" destructiveButtonTitle:nil otherButtonTitles:@"Pin",@"Linie", @"Polygon", nil]; [[[modeOptions valueForKey:@"_buttons"] objectAtIndex:0] setImage:[UIImage imageNamed:@"symbol-pin.png"] forState:UIControlStateNormal]; [[[modeOptions valueForKey:@"_buttons"] objectAtIndex:1] setImage:[UIImage imageNamed:@"symbol-line.png"] forState:UIControlStateNormal]; [[[modeOptions valueForKey:@"_buttons"] objectAtIndex:2] setImage:[UIImage imageNamed:@"symbol-polygon.png"] forState:UIControlStateNormal]; modeOptions.actionSheetStyle = UIActionSheetStyleBlackTranslucent; } [modeOptions showFromTabBar:self.tabBarController.tabBar]; }
图片是88*88px的,我需要图片像imageView是25*25px的边框。不知道应该怎么实现?
解决方案:
-(void)actionSheetClicked { if(!self.modeOptions) { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Dummy",nil]; //Here I add dummy button for getting cancel button style. self.modeOptions = actionSheet; [actionSheet release]; } self.modeOptions.actionSheetStyle = UIActionSheetStyleBlackOpaque; [self.modeOptions showFromTabBar:self.tabBarController.tabBar];//Here i show from tab bar, you can showfromview also // [self.modeOptions setBounds:CGRectMake(0, 0, 320, 300)]; UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)//frame size for action sheet in both modes { [self.modeOptions setBounds:CGRectMake(0, 0, 320, 300)]; } else { [self.modeOptions setBounds:CGRectMake(0, 0, 480,250)]; } UIButton *buttonDum = (UIButton *)[[self.modeOptions subviews] objectAtIndex:0]; [buttonDum setHidden:YES];//hide dummy button.. UIButton *cancelButton = (UIButton *)[[self.modeOptions subviews] objectAtIndex:1]; if( !self.button1) { UIButton *Btn = [[UIButton alloc]initWithFrame:CGRectMake(80, 40, 70, 70)];//**Here I use 70 X 70 px image , you can edit it** self.button1 = Btn; [self.button1 addTarget:self action:@selector(invokeFirstBtn) forControlEvents:UIControlEventTouchUpInside]; [self.button1 setImage:[UIImage imageNamed:@"btn1Image.png"] forState:UIControlStateNormal]; [self.modeOptions addSubview:self.button1]; [Btn release]; } if( !self.button2) { UIButton *Btn = [[UIButton alloc]initWithFrame:CGRectMake(180, 40, 70, 70)];//**Here I use 70 X 70 px image , you can edit it** self.button2 = sharBtn; [self.button2 addTarget:self action:@selector(invokeButton2) forControlEvents:UIControlEventTouchUpInside]; [self.button2 setImage:[UIImage imageNamed:@"btn2Image.png"] forState:UIControlStateNormal]; [self.modeOptions addSubview:self.button2]; [Btn release]; } if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)//frame size for action sheet in both modes { cancelButton.frame = CGRectMake(50, 140, 220, 40); self.button1.frame = CGRectMake(65, 40, 70, 70); self.button2.frame = CGRectMake(175, 40, 70, 70); } else { cancelButton.frame = CGRectMake(135, 140, 220, 40); self.button1.frame = CGRectMake(155, 40, 70, 70); self.button2.frame = CGRectMake(260, 40, 70, 70); } }
用这段代码,可以随意修改框架尺寸,还可以创建不带虚拟按钮的actionsheet。