SPI protocol with shift registers both as input and output

I'd like to use daisy chained shift registers to receive input from push buttons and control LEDs at the same time.
I've checked the shiftOut() tutorial and it seems that the SPI protocol is not necessary, but it's supposed to be faster and more efficient(?)...so, if I want to use SPI, is it possible to get input and output at the same time?
Reading through the SPI reference on Arduino's website, I saw that the pins to use when using this protocol are very specific: for UNO it's pin 11 for MOSI, 12 for MISO, 13 for SCK and 10 for SS.
Does this mean that with an UNO you can't have multiple digital inputs and outputs at the same time? Should I go for multiplexers for the push buttons and use shift registers for the LEDs?
I've got a couple of examples (I think it's by Nick Gammon) controlling LEDs with daisy chained shift registers that work very well and they use SPI.
Anyone has any reference to using shift registers for input, something similar to Gammon's examples or the shiftOut() tutorial?

…so, if I want to use SPI, is it possible to get input and output at the same time?

This is your lucky day. That is exactly how the SPI bus works. Both the master and slave transmit data simultaneously on the SPI clock pulses.

SurferTim:

...so, if I want to use SPI, is it possible to get input and output at the same time?

This is your lucky day. That is exactly how the SPI bus works. Both the master and slave transmit data simultaneously on the SPI clock pulses.

Ok, I guess that's good, but it's all Greek to me (even though I'm Greek). Could you give me a few hints here? For example, which pins to use for the input shift registers and which pins for the output ones? Maybe some example code you know there's somewhere...
Thanks

With SPI there is a master and many slaves. The master is the only one that sends the SCK signals (Uno pin 13).
MISO is the Master Input Slave Output (pin 12). MOSI is Master Output Slave Input (pin 11). If you are using, say 74595 shift registers (serial in parallel out) the 595 SI (serial input) would connect to MOSI. A parallel input serial output register would connect SO (serial output) to MISO. Use chip selects to choose which slave is connected to the bus.

Any pin can be used as chip select, the only limitation is that the SS pin be set to output.

Fast way, using parts like 74HC165 anf 74HC595:
http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf

digitalWrite (SS165, LOW); // low asynchronously loads parallel inputs in
digitalWrite (SS165, HIGH); 
byteIn1 = SPI.transfer(byteOut1); // reads shift-in register while writing to shift-out register
byteIn2 = SPI.transfer(byteOut2); // daisy chained, so read 16 total inputs and write 16 outputs
digitalWrite (SS595, LOW);
digitalWrite (SS595, HIGH); // rising edge clocks data into output register

Pretty simple, eh? Be sure to put 0.1uF cap on Vcc pin of all shift registers.
SCK goes to Shift clock on all devices
MISO is QH from 165
MOSI goes to SerIN on 595
SS165 goes to PL (parallel load)
SS595 goes to SRCK (shift register clock, the output stage clock)