UIActionSheet's separate lines overlap with other lines - iphone

I'm adding UIActionSheet with 100 sheets to UIView.
Here is a code.
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:#"Choose Number"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
for (int i = 1; i <= 100; i++) {
[actionSheet addButtonWithTitle:[NSString stringWithFormat:#"%d", i]];
}
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:#"Cancel"];
cancelIndex = actionSheet.cancelButtonIndex;
[actionSheet showInView:self.view];
Problem Image
The line between 22 and 23 overlaps.
What is problem?

Related

How to generate multi-line rather than single line with UIAlertView?

This is my code
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:#"Added to Cart" message:#"Some items are added for time being!" delegate:self cancelButtonTitle:#"View Cart" otherButtonTitles:#"Continue \n Shopping", nil];
alert.tag = 20;
[alert show];
I get output like this:
I need like this:
I have manual solution for you. But I think its not a good solution:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:#"Added to Cart" message:#"Some items are added for time being!" delegate:self cancelButtonTitle:#"View Cart" otherButtonTitles:#"", nil];
UILabel *buttonTitle = [[UILabel alloc] initWithFrame:CGRectMake(148, 102, 125, 40)];
buttonTitle.text = #"Continue Shopping";
buttonTitle.font = [UIFont boldSystemFontOfSize:15];
buttonTitle.textColor = [UIColor whiteColor];
buttonTitle.textAlignment = UITextAlignmentCenter;
buttonTitle.backgroundColor = [UIColor clearColor];
buttonTitle.numberOfLines = 2;
[alert addSubview:buttonTitle];
alert.tag = 20;
[buttonTitle release];
[alert show];
You can use it anyway....
UIAlertView doesn't support multi-line buttons. One option would be to just use "Continue" instead of "Continue Shopping" as the button title, otherwise you'd have to use a custom alert view component, e.g. CODialog (you might have to customize it a bit to allow multi-line buttons, but it should be easy).
I think you can try to set numbersOfLine property to label on button. But i don`t know will apple aprove that.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:#"Added to Cart" message:#"Some items are added for time being!" delegate:self cancelButtonTitle:#"View Cart" otherButtonTitles:#"Continue \n Shopping", nil];
NSArray *subviewsArray = [alert subviews];
for (UIView *subview in subviewsArray) {
if ([subview isKindOfClass:[UIButton class]]) {
NSArray *btnSubviews = [subview subviews];
for (UIView *btnSubview in btnSubviews) {
if ([btnSubview isKindOfClass:[UILabel class]]) {
UILabel *title = (UILabel *)btnSubview;
title.numberOfLines = 2;
}
}
}
}
alert.tag = 20;
[alert show];
[alert release];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:#"Added to Cart" message:#"Some items are added for time being!" delegate:self cancelButtonTitle:#"View Cart" otherButtonTitles:#"Continue \n Shopping", nil];
alert.tag = 20;
[[[alert buttons] objectAtIndex:1] setLineBreakMode:UILineBreakModeWordWrap];
[alert show];
This code does exactly what you need.
Note, however that
- [UIAlertView buttons] is undocumented
- [UIButton setLineBreakMode] is deprecated. You can however, replace it with
[button.titleLabel setLineBreakMode] which is essentially the same.

Local declaration of 'ActionSheet' hides instance variable

Getting three warning messages for these three statements
ActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[ActionSheet showInView:self.view ];
[ActionSheet release];
Local declaration of 'ActionSheet' hides instance variable
#property (nonatomic, retain) UIActionSheet *ActionSheet;
#synthesize ActionSheet;
-(void)displayActionSheet:(id)sender
{
UIActionSheet *ActionSheet = [[UIActionSheet alloc]
initWithTitle:#"Language Options"
delegate:nil
cancelButtonTitle:#"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:#"Devanagari", #"English", nil];
ActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[ActionSheet showInView:self.view ];
[ActionSheet release];
}
Any idea what is wrong.
First: variables are NOT written in uppercase. please rename your actionSheet variable.
Second: your property hast the same name, as your local variable (ActionSheet in your case). If you want to save the actionSheet in the member variable, than remove UIActionSheet* resulting in that function:
-(void)displayActionSheet:(id)sender
{
ActionSheet = [[UIActionSheet alloc]
initWithTitle:#"Language Options"
delegate:nil
cancelButtonTitle:#"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:#"Devanagari", #"English", nil];
ActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[ActionSheet showInView:self.view ];
[ActionSheet release];
}

iphone 4 UIAlertView setAlertViewStyle unrecognized selector sent to instance

I used the below code to add textfield in UIAlertView. It works fine in Simulator(iOS SDK 5.0) but when i install in device(iOS 4.0.1) i get "Unrecognized selector sent to instance error"
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:#"Enter your name" message:nil delegate:self cancelButtonTitle:#"Cancel" otherButtonTitles:#"OK", nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
alert.tag = 9001;
[alert show];
[alert release];
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:#"My Test Alert" message:#"what do you want" delegate:nil cancelButtonTitle:#"tell me" otherButtonTitles:#"Cancel", nil];
[myAlert addTextFieldWithValue:#"nothing" label:#"say something"];
UITextField * aTextFld = [myAlert textFieldAtIndex: 0];
aTextFld.clearButtonMode = UITextFieldViewModeWhileEditing;
aTextFld.autocorrectionType = UITextAutocorrectionTypeNo;
[myAlert show];
[myAlert release];
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:#"Hello!" message:#"Please enter your name:" delegate:self cancelButtonTitle:#"Continue" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumberPad;
alertTextField.placeholder = #"Enter your name";
[alert show];
[alert release];
Include the library from here: http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html
Try to use the below code:
AlertPrompt *prompt = [AlertPrompt alloc];
prompt.tag = 100;
prompt = [prompt initWithTitle:#"Enter a name" message:#" " delegate:self cancelButtonTitle:#"Cancel" okButtonTitle:#"Save"];
[prompt show];
[prompt release];

How to change the frame of AlertView in iPhone App...?

I want to Add TextBox on AlertView. But When i'm adding, it overlaps little with buttons on it...So i want to increase the height and width of alertview...Could Anybody tell any idea??
Try the following code:
UIAlertView alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(#"Title", nil)
message:NSLocalizedString(#"Message\n\n\n", nil)
delegate:self
cancelButtonTitle:NSLocalizedString(#"Cancel", nil)
otherButtonTitles:NSLocalizedString(#"OK", nil), nil];
UITextField textField = [[UITextField alloc] initWithFrame:CGRectMake(16.0, 100.0, 250.0, 25.0)];
textField.borderStyle = UITextBorderStyleRoundedRect;
[alertView addSubview:textField];
[textField release];
[alertView show];
[alertView release];
try this
UITextField *TextField = [[UITextField alloc] initWithFrame:CGRectMake(22.0, 50.0, 240.0, 30.0)];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:#"Enter\n\n" message:#"" delegate:self cancelButtonTitle:#"Ok" otherButtonTitles:nil];
[alertView addSubview:TextField];
[alertView show];

Showing a alertview with a textbox in iPhone

Is it possible to show an alertview with a textbox inside like the AppStore app.
It asks for password in such a dialog.
I've seen atleast a couple of other third party apps using it. Is it a private API?
Here's an "Apple Approved" way of doing it from Tharindu Madushana. I got it from his comment in this page: http://iosdevelopertips.com/undocumented/alert-with-textfields.html
// Ask for Username and password.
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:#"Twitter Details!" message:#"\n \n \n" delegate:self cancelButtonTitle:#"Cancel" otherButtonTitles:#"OK", nil];
// Adds a username Field
UITextField *utextfield = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
utextfield.placeholder = #"Username";
[utextfield setBackgroundColor:[UIColor whiteColor]];
[alertview addSubview:utextfield];
// Adds a password Field
UITextField *ptextfield = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 80.0, 260.0, 25.0)];
ptextfield.placeholder = #"Password";
[ptextfield setSecureTextEntry:YES];
[ptextfield setBackgroundColor:[UIColor whiteColor]]; [alertview addSubview:ptextfield];
// Move a little to show up the keyboard
CGAffineTransform transform = CGAffineTransformMakeTranslation(0.0, 80.0);
[alertview setTransform:transform];
// Show alert on screen.
[alertview show];
[alertview release];
//...
// Don't forget to release these after getting their values
[utextfield release];
[ptextfield release];
And finally to get the text back
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
return; //Cancel
UITextField *field = (UITextField *)[[alertView subviews] lastObject];
NSLog (#"%#", field.text);
}
Yes, it's undocumented. To add a text field to UIAlertView, use addTextFieldWithValue: label: method. You call with the default text as the first argument and the text that displays in an empty field as the second. Having done that, you can access the field via using textFieldAtIndex:n - see below.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: #"Who are you?"
message:#"Give your full name"
delegate:self cancelButtonTitle:#"Cancel"
otherButtonTitles:#"OK", nil];
[alert addTextFieldWithValue:#""label:#"Name"];
// Customise name field
UITextField* name = [alert textFieldAtIndex:0];
name.clearButtonMode = UITextFieldViewModeWhileEditing;
name.keyboardType = UIKeyboardTypeAlphabet;
name.keyboardAppearance = UIKeyboardAppearanceAlert;
[alert show];
The next snippet shows how to retrieve the value in the name field:
NSLog("Name is %#", [[modalView textFieldAtIndex:0] text]);
This is a really old questions with really old answers.
This is a sample of how I get a UITextfield into a UIAlertView since ios 5:
UIAlertView *message = [[UIAlertView alloc] initWithTitle:#"New List Name" message:#"" delegate:nil cancelButtonTitle:#"Cancel" otherButtonTitles:#"Continue", nil];
message.alertViewStyle = UIAlertViewStylePlainTextInput;
self.alertTextField = [message textFieldAtIndex:0];
self.alertTextField.keyboardType = UIKeyboardTypeAlphabet;
message.delegate = self;
[message show];
[self.alertTextField becomeFirstResponder];
where alertTextField was set up like this:
#property (nonatomic, strong) UITextField *alertTextField;
Jeff Lamarche posted some sample code on his blog to do just this. The formatting looked a bit wonky when I tried it but it's probably a good starting point.