I want to disable buttons in the UIAction sheet and enable them after a certain condition is true. How do I achieve this? Any ideas?
相关问题
- CALayer - backgroundColor flipped?
- Core Data lightweight migration crashes after App
- Core Data lightweight migration crashes after App
- How can I implement password recovery in an iPhone
- back button text does not change
相关文章
- 现在使用swift开发ios应用好还是swift?
- Could I create “Call” button in HTML 5 IPhone appl
- TCC __TCCAccessRequest_block_invoke
- xcode 4 garbage collection removed?
- Xcode: Is there a way to change line spacing (UI L
- Unable to process app at this time due to a genera
- How can I add media attachments to my push notific
- How do you detect key up / key down events from a
This is probably a bit late. But, the way I figured out is create UIButton(s) and add them to UIActionSheet subview. Make certain these buttons are placed on top and completely cover the default UIActionSheet button(s) to replace. When the UIButton is placed over the default UIActionSheet button, its UIResponder takes precedence over UIActionSheet button UIResponder. So, doing so you can disable and enable those buttons however you'd like anywhere in you UIViewController logic. This may be an alternative to accessing private methods to the SDK (like above - UIThreePartButton) and apple might reject your app. I believe this follows the Apple guidelines.
i.e. Setup UIButtons in order to enable / disable after certain conditions occur.
NOTE: This worked perfectly in a previous app I built.
You could try [actionSheet valueForKey:@"_buttons"] in your UIActionSheetDelegate like so:
Hopefully this wont change in future releases of the sdk.
If you add the view to the action sheet, the view wont receive any event. You need to the view to the superview of the action sheet.
See below how i've added an button with touch up event:
}
I faced a similar problem when I had an action sheet that changes based on some conditions. I omitted the choices that are not applicable from the action sheet altogether but in some cases I end up with an action sheet with just one choice. This seems a bit silly, since I could activate that choice immediate without displaying the sheet at all.
However, I also want users to learn that clicking a certain button on screen gives them a list of choices they can choose from. That's why I want to display the action sheet also in cases when it has just one choice. I thought about disabling the non-applicable choices instead of omitting them from the sheet but that didn't feel right, either.
My case is related to having a user-icon in a custom bottom bar and pressing it presents the following choices:
UIActionSheet is not intended for customizing. It should display actual set of available options. It should not change button's availability while on top. Just remove unused buttons, or use custom view instead
Is there a circumstance that can change, while the action sheet is open, that could cause the button to become enabled? If not, I think the better approach is to alter the buttons that the sheet displays based on your condition.
Otherwise, the only way of handling this is to iterate through the sheet's subviews, like Craig said, and look for the
UIButton
objects. I'd be careful about using the button's title, though, because the title could (and should!) be localized for different languages. So comparisons against the title aren't all that reliable. Since you didn't create the button, you don't really know what thetag
oraction
of each button would be, either, so that's a bit difficult, too.Presumably, the buttons will appear in the
subviews
array in the order you specified them to theUIActionSheet
, but since this isn't documented, there's no guarantee that they will appear in that order, or that they will continue to appear in that order in future releases of the Cocoa Touch SDK. Because of that, I'd worry mainly about being rejected from the App Store for using undocumented functionality.