Here is an interesting user interface design question.
As application designers, if a UITableView supports "Tap and Hold" gesture on its cells to apply an action on that specific cell, should we say so visually? If the application designer decide to answer yes to this question, the next one is: how does the application convey this "feature"? Otherwise, if the answer is no, could the user miss important application functionalities?
As software developers, not as designers, we tend to be wordy or base our decisions on anxiety: what if the user cannot see that? OK, I'll tell him! What if the user cannot see that? I'll make it bigger and with a different colour. What if... well, you get the idea. I call this design based on anxiety.
Let's look at an example. Osfoora: in this Twitter client, a user can tap and hold a cell in order to apply an action on a twitter message. There is no place where the user is invited to do this gesture. Is this an Apple sanctioned user interface design choice? I cannot remember any standard iPhone app made by Apple with this user interface interaction model. A similar issue also applies to swiping a table cell. Apple seems to be on the wordy side with the App Store Genius feature as shown on the following screen shot ("swipe to remove an item").
There are plenty of places on the web with "detecting tap and hold on uitableview" on a table cell. So there is a real need for this. What are the options for telling the user about this gesture availability?
- An header of footer with text could be included.
- The first or last cell of the table could include a mention of this capability.
- A dummy section title could include a mention of this capability.
- A mention in the background of the table
Scenario 1 - header or footer.In the case, visually this is cool for the first time user: they get to know quickly that this application supports "tap and hold" on a cell for specific features. But, over time, experienced users don't need to be reminded very time he or she uses the application. So this table header or table footer becomes useless and take visual space. On the technical side, this implementation is very easy to do as UITableView provides a way to set the header or footer from a UIView.
Scenario 2 - in-table cell. In this scenario, which seems to be very close to the previous one is only a technical implementation choice. And this is a bad implementation choice because it makes things harder to manage when presenting table content. We need to take into account a specific row that isn't a real one. Scenario 1 is better technically speaking.
Scenario 3 - table section.In this scenario, we don't have to make any special treatment for a dummy table cell with explanation text. We only have to set a title for a section and we're all set. Visually, this could look better as the section title stays always at the top position of the table when the user scroll the table content. But, this become again an artifact and make this implementation a bad choice too.
Scenario 4 - table background text.This one is kind of a compromise. When the table is empty, the user sees an explanation text that says "hey, you will be able to tap any cell and hold it in order to bring new features applied to that cell". As the table content grows, the users won't see this text forever because the table content will be over the explanation text. Technically, this is very simple to implement.
The final word is this: the "tap and hold" gesture on table cells becomes more and more available in applications. It doesn't seems to be an Apple sanctioned way of interacting with table but like "pull to refresh", users will start to try this gesture and see if the application react or not.
What are your thoughts? How did you implement "tap and hold" in your apps?