SelectRow: inComponent: animated: has always worked to move the picker for me, and I've done stuff like this plenty. The thing that used to catch me out is that will trigger pickerview: didSelectRow: inComponent: on the delegate, which I generally only want called when the setting has come from the user, not from my own code. The way to work around this is either
picker.delegate = nil;
[picker selectRow:foo inComponent:bar animated:probably];
picker.delegate = thatObjectWhichWasDelegateAsecondAgo;
Or have a bool ivar you cans set to no briefly eg listenToPicker, then inside didselectrow..
-(void)pickerview:pickerview didSelectRow:row inComponent:component{
if (listenToPicker){
///act on input
}}