You should have a model that represents the board, typically an array with rows and cols. As the tiles fall, they may do so at the same or even different rates, once they have completed traveling the distance required to cover one space, they de-list themselves from their starting location, and list themselves with their new location.
Some notes:
- It is wise to measure this based on the center of the tile, such that once the center has moved into the next cell, you count it as in that next cell. This will look better overall.
- Separate the model of where the tile is, from how the tile falls. Once you've detected that the tile is above an empty cell, have it enter the free-fall mode, sending off 'I've switched cells' notices as it moves down a cell. Falling more than one cell down will naturally arise from this and you will not need to create logic to control that.
- This all assumes you don't have a rotating board or anything fancy like that.
- This is by no means the only way to do it, it just is one way to do what most match-3 games do.