If your app displays a lot of data, it's almost inevitable that you'll need to provide a mechanism for searching through that data.
The preceding pattern is one of the most common on most platforms. The user can type in the Search field and the results will appear in a table below the Search field. The Cancel button is not always present. Sometimes, it's just a small icon, but this depends on the app and the platform.
Whether or not the search occurs while the user is typing or it requires them to tap the Search button in their onscreen keyboard is up to you. If you can quickly search the dataset, it might be wise to display search results as the user types. This way they can quickly see the result set being whittled down to what they want.
If, however, it takes a long time to search, then it is better to wait until the user types what they want and then tells you when to search. Then you can take your time (don't forget to display some sort of notice that your app is thinking), and then display the results when the search is complete.
Another common pattern when searching is the need to scope the search, as in the following pattern:
Here, the buttons below the search bar are segmented buttons, something typical of iOS. There are equivalents for most platforms. If one of them is tapped, it is highlighted, and the search only occurs within the displayed scope.
In this example, if the user tapped To, then the search would only occur for the To portion of each item.
When it comes to searching, there are also often requests to sort and filter the data as well. You can usually accommodate these by using a toolbar with the sort and filter buttons on it, and then display a menu listing the various options. For example, tapping a Sort button could display a menu of first name, last name, account number, and so on. There are various patterns that one could use to implement more complex sorting and filtering, but if possible, keep it simple.