I am looking to add to my iOS app a control that looks like this menu on the bottom:
Can anybody tell me what control that is? Does not look like Picker View.
That is a UIActionSheet. Official Documentation
It cannot be dragged in from the list of UI elements. It is presented programmatically very similar to a UIAlertView.
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:#"Title"
delegate:self cancelButtonTitle:#"Cancel Button"
destructiveButtonTitle:#"Destructive Button"
otherButtonTitles:#"Other Button 1", #"Other Button 2", nil];
[actionSheet show];
Related
UIActionSheet' was displaying properly in my one of the application until iOS 7 release. But now when I open UIActionSheet in iOS 7, it shows black line` on top corner of action sheet. As you can see in below image
After spending ample amount of time to find its reason, Finally I found that if we display UIActionSheet title (set title property with some text) then those black line removed by iOS 7. like image
But As per requirement I don't want to display UIActionSheet title. So Is there any other approach to remove those black lines in corner? Or its an iOS 7 bug?
- (IBAction) showActionsheetWithoutTitle:(id)sender {
UIActionSheet *actionsheet = [[UIActionSheet alloc] initWithTitle:#"" delegate:self cancelButtonTitle:#"Cancel" destructiveButtonTitle:nil otherButtonTitles:#"Button1", #"Button2",#"Button3", nil];
[actionsheet showInView:self.view];}
Replace #"" with nil for initWithTitle, as it takes a small gap between the title and other buttons:
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:#"Button1", #"Button2",#"Button3", nil];
I have the following view hierarchy
MMDrawerViewController
--UINavigationController (CenterViewController)
-----UITableViewController (RootViewController for UINavigationViewController)
---------UIToolbar with 1 barButtonItem
--UIViewController (LeftSideViewController)
Now when the button item is selected, a UIActionSheet is shown. This works perfectly fine when I just run the app and select the barButtonItem. But if I select another option, which present modals another view controller followed by dismissing the view controller, now if I select the barButtonItem, the background of the UIActionSheet is misplaced.
Kindly check the attached image.
Any help would be highly appreciated.
Update
This is how I show the UIActionSheet
UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:#"" delegate:self cancelButtonTitle:#"Cancel" destructiveButtonTitle:nil otherButtonTitles:#"Upload", #"Create Folder", #"Create File", nil];
[actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
[actionSheet showFromToolbar:self.navigationController.toolbar];
I have a UIActionSheet to provide user options on a table view controller. I have implemented this before without issue, but for some reason now, my event handler does not fire when a button is clicked. In my header file, I have implemented the proper delegate as follows:
#interface GaugeDetailTableViewController : UITableViewController <UIActionSheetDelegate>
In my implementation, I have the following code to support the action sheet:
-(void)loadPopup{
UIActionSheet *popup = [[UIActionSheet alloc]
initWithTitle:#"Options"
delegate:nil
cancelButtonTitle:#"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:#"Add to Favorites", #"Gauge Detail Help", #"Main Menu", nil];
popup.actionSheetStyle = UIActionSheetStyleDefault;
[popup showInView:self.view];
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(#"%d\n", buttonIndex);
}
The action sheet appears properly on the view controller, but for some reason, the action sheet click event handler is never reached. Any suggestions? Thanks!
You need to set the delegate:
UIActionSheet *popup = [[UIActionSheet alloc]
initWithTitle:#"Options"
delegate:self
cancelButtonTitle:#"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:#"Add to Favorites", #"Gauge Detail Help", #"Main Menu", nil];
popup.actionSheetStyle = UIActionSheetStyleDefault;
It looks like you have forgotten to set the delegate. You need to implement UIActionSheetDelegate (which it looks like you have) and then set the delegate!
alert = [[UIAlertView alloc] initWithTitle:#"Enter Student Name" message:#"" delegate:self cancelButtonTitle:#"Cancel" otherButtonTitles:#"Save", #"Save and Add", nil];
alert.tag = 1;
alert.alertViewStyle=UIAlertViewStylePlainTextInput;
[alert show];
its been working beautifully in potrait mode but in landscape my UITextfield going out of screen.and now i want to move a alertView frame a little bit down so that it will be visible .
Unfortunately you can't change any thing in the UIAlertView design in iOS7, you should use it as is, you have three chices here:
Take off the cancel button (If i were you i would do this).
Use a custom UIAlertView from cocoacontrols.com and put the three buttons at the same line.
Use another control like popover or modal.
I've noticed in my app that my cancel button is hard to tap, it seem like the hit area is not in the center.
How do I fix this ?
Heres my code...
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:#""
delegate:dg
cancelButtonTitle:#"Cancel" destructiveButtonTitle:nil
otherButtonTitles: #"Help Pages", #"Tutorial",
#"Feedback / Questions ", #"Facebook Group", #"About", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[actionSheet setTag:CommonUIActionSheetHelp];
[actionSheet showInView:vw];
[actionSheet release];
I think your problem lies in the [actionSheet showInView:vw];, perhaps you are using tabBarController/toolBar in you application(at bottom), this error occurs at that time.
you should use either showFromToolbar or showFromTabBar as per your design. If your design is different then please mention it.(if no tabBar/toolBar there).
Thanks
agree whit Ravin answer and you can try
[actionSheet showInView:[UIApplication sharedApplication].keyWindow];
it can help also
I have similar problem in iOS 8, using UIAlertController with style UIAlertControllerStyleActionSheet.
The problem is that the first tap on the action sheet is ignored.
Turned out it got to do with my text field's keyboard interfering with the touches.
The fix is to dismiss the keyboard first, then present the action sheet.
[textfield resignFirstResponder];
[self presentViewController:alert animated:YES completion:nil];