Objective C Which Alert did the button press come from - iphone

another probably simple iPhone obj-c question for you...
I have a couple of alerts which have buttons in them that are presented to the user in certain circumstances, both are part of one view. Now I know how to tell which button was pressed, but how do I know which alert the button pressed is related to?
Any ideas would be really handy! Cheers!

Set a tag to each of the alerts, and compare the tag of the alert caught at the delegate method didDismissWithButtonIndex.
Set tag as, alert.tag = 10;
and check in delegate as
if (alertView.tag == 10)

Try to implement a simple delgate for your alert views.
For exemple using : alertView:clickedButtonAtIndex:
you will be able to know which alert view the button pressed is related to.

You can call UIAlertView's Delegate method explained below...and check for title or alert message like this.. here i had given you the example of title...
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0 && [alertView.title isEqualToString:#"Invalid"])
{
//Your Stuff goes here
}
}

Related

copy & paste menu of UITextField is missing some time

In my app, sometimes all the textfield 's copy&paste menu is missing when the user is tapping in the textfield.
But when the user kill the app and restart again, the function comes back.
Has anyone encountered this problem before?
I do not subclass UITextField, what could cause such problem?
Any advice would be greatly appreciated.
Thank you.
I have found that in on of my view controller, I used two alertViews. After the first alertView diss, I immediately pop up the second UIAlertView in the callback
- (void) alertView:(UIAlertView *) alertView clickedButtonAtIndexL(NSInteger) buttonIndex
{
//[thesecondalertview show];
}
Since the firstAlert view does not completely dimiss, pop up the second alertview it may cause the UIWindow disorder.
If we pop up the second UIAlertView in the first alertviews's callback,
- (void) alertview:(UIAlertView*)alertview didDissmissWithButtonIndex:(NSInteger) buttonIndex
the problem solved.

Undo button within a UIActionSheet

I have a UIActionsheet with several buttons setup. How would I go about adding a undo function? I'm using UITextfields
Set the appropriate UIActionSheet button to call the undo method on the desired UITextField's NSUndoManager object. For all UITextField and UITextView objects in iOS 3.0 and higher, there is an undoManager object that can be accessed and used to manage undoing and redoing of operations. The necessary code would go something like this:
(UIActionSheetDelegate method implementation)
- (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == /*undo index*/)
[yourTextField.undoManager undo];
}
EDIT: I suggest you look at the Apple documentation for Undo Managers, it should help you further with this should you need it.
Have you considered Shake to Undo? An Undo alert comes up if you enter some text in a UITextField/UITextView & shake your iPhone.

Dismissing UIAlertView programmatically

I have a UIAlertView with the following delegate method:
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
But I have a problem. In that method, I do some logic and perform some lines of code which take a small amount of time. I would like to dismiss the alertView before I do all of this. I want to dismiss the alert view at the very top of that method. That way, when the user taps a button on the alertView, the app doesn't seem frozen for a second while the next lines of code are executed.
To dismiss a alert programaticly do:
/* Your Processing Code Here */
[theAlertView dismissWithClickedButtonIndex:0 animated:YES];
The [theAlertView dismissWithClickedButtonIndex:0 animated:YES]; will make the alert go away
Either use the delegate method -alertView:didDismissWithButtonIndex: instead—it gets called once the alert view’s been removed from the screen, which will at least conceal the lag your app’s having—or, better, use a background thread, e.g. with -performSelectorInBackground:withObject:, to handle whatever processing you need to do.
Use the other delegate method for did, instead of will:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
You should probably also execute the other lines of code you mention asynchronously, so as not to freeze the UI at all.

Several Buttons using the same UIActionSheetDelegate methods

I have a view that contains 5 buttons. When each button is tapped the UIActionSheetDelegate method is called: -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
I have each buttons tag property set 0-4. I'm having a hard time with the delegate method finding out which button.tag was sent. Is the sender.tag information passed along to the action sheets delegate methods?
For the delegate method I use a case statement to find out which button was pressed on the action sheet and I guess I'll use an if statement to determine which sender.tag == 0 etc. I'm just a little confused at this point and need a little assistance if at all possible.
As always thanks in advance!
T
You use the buttonIndex that is passed to actionSheet:clickedButtonAtIndex: to determine which button was pressed. The buttons are indexed starting at 0.

UIALertView customization

I am developing an iPhone application, in which I want to use customized alert sheet. The customization is required since I want to set image for Alert-Sheet buttons, change the size of these button etc.
I have done the following things:
Created UIView with customized controls that I wanted.
Created and displayed UIAlertView
In the delegate method of UIAlertView (UIAlertViewDelegate) i.e
- (void)willPresentAlertView:(UIAlertView *)alertView
I am removing all the subviews of UIAlertView and adding my customized view as subview.
Everything works fine till here. Since I have used customized buttons, I need to remove the alert sheet explicitly in the Action Method of the button by calling dismissWithClickedButtonIndex:animated: on UIAlertView.
Even though the UIALertView gets dismissed, it takes around 0.5 second to get dismissed.
Can someone help me out to solve the problem of this delay in dismissing OR some other way of customization of Alert View buttons.
Thanks and Regards,
Deepa
I could get it worked by passing YES to dismissWithClickedButtonIndex:animated: call i.e [alertView dismissWithClickedButtonIndex: 0 animated: YES]. Initially I was passing the flag as NO. But, I don't know whey it takes less time if we pass the animation flag as YES.
Anyone knows this?
Instead of doing this
/*
1. Created UIView with customized controls that I wanted.
2. Created and displayed UIAlertView
3. In the delegate method of UIAlertView (UIAlertViewDelegate)
*/
do this:
Create a class like this:
#interface CustomAlertView : UIAlertView
{
//For ex:
UIButton *myCustomButton;
//and other custom controls
}
Implement it in following method:
-(id)init
{
}
In the above method use:
[self addSubView: myCustomButton];
I have given just the idea. I have code but not presently to share with you.
If you are not able to implement the above I will provide later.
Thanks.
Here is the library which can solve your UIAlertView Customisation issue. It can also work as UIActionSheet. It has very good customisation options.
https://github.com/Codigami/CFAlertViewController